x-viral
Skill4 starsChanged 46 days agoMITView on GitHub
The virality engine. Find the posts that are actually outperforming in the user's niche on X, rank them by how far each beat its own account, break each one down into hook, structure and format, then recreate the winners in the user's own voice for their audience. Use when the user says "find viral posts", "what's working on X right now", "what are people posting in my niche", "reverse engineer this account", "build me a swipe file", "why did this tweet blow up", "recreate this post for me", or has nothing to post and no evidence to decide with.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- swayamdhawan/x-agentword for word, first seen Oct 20, 2026
Other versions1 project uses a version of this.
Word for word · 1
- swayamdhawan/x-agent★ 0100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 39
Ask the user for 6 to 10 accounts, or propose them and get approval:
- Very specific: line 112
The unclassified hooks: Every hook the classifier could not name is either noise or a formula hooks.json does not have yet.
- Very specific: line 133
Keep the found post's structure and none of its words beyond the frame.
- Distinctive: line 135
Never hand back "make a post like this one".
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
x-viral
The research skill. Everything else in this pack writes; this one goes and looks first, and then writes from what it found. Run it monthly, not daily. Formats on X last a season.
Two tools live in this folder and both run:
python3 pull.py urls.txt > swipe.tsv # URLs you picked -> exact text, format, date
python3 swipe.py swipe.tsv --out ~/.claude/x/swipe.md # rank, break down, write the swipe fileThe one idea that makes this worth doing
Raw numbers are not evidence. An account with 900,000 followers doing 400,000 views had an ordinary Tuesday. An account with 6,000 followers doing 400,000 views found something, and that something is copyable.
So everything ranks on the outlier multiple: a post's views divided by that account's own median. Above 3x is a signal. Under 1.5x is that account's normal day, and it teaches nothing however big the number looks.
Step 1: pick the accounts
Ask the user for 6 to 10 accounts, or propose them and get approval:
- 4 direct: same niche, same audience, somewhat ahead of the user.
- 3 adjacent: different niche, same audience. Formats arrive here first.
- 2 or 3 outsized: much bigger, for format only. Never for cadence or tone.
Also ask for the user's own Bookmarks. It is the most relevant corpus there is and it is already filtered by their taste.
Step 2: collect, by hand, in order
For each account, the last 10 to 15 posts in order, the dull ones included. Not the hits. The median is computed from these rows, and a sample of only the bangers inflates it and hides the outliers you came for.
Copy each post's link, and read its view count off the post (it is public on every post, under the text). Likes, replies and reposts too, if they are easy to see.
The user can do this in their own browser in about ten minutes. If this session has a browser tool connected to the user's own logged-in browser, you can open the profiles and read them with the user present, at human speed. Rules that are not negotiable:
- Never log into X on the user's behalf, never ask for a password, never use their session for anything but reading the pages they asked about.
- This is reading, not scraping. Ten accounts, a dozen posts each. X's Terms prohibit crawling or scraping "in any form, for any purpose" without written consent, and name damages for bulk access. No crawler, no scraping service, no loops in the background, no search-results harvesting.
- Copy the shape, never the words. Hook formula, structure, format, length. Not their sentences. Attribute every row to its account.
Step 3: fill the sheet
python3 pull.py urls.txt > swipe.tsvpull.py calls X's documented oEmbed API, the one that exists so websites
can embed a post from its URL. It fills in the exact text with its line
breaks, the account, the date and the format (text / media / link / long).
One request per second, capped at 100 a run. It does not fetch counts,
because oEmbed does not carry them, so fill in the views column (and likes,
replies, reposts if you have them) from what is on screen.
Step 4: rank and break down
python3 swipe.py swipe.tsv --out ~/.claude/x/swipe.mdFor every post it computes the outlier multiple over that account's own median, then the breakdown:
| what it names | |
| hook | the formula from ../x-post/hooks.json (21), and the hook's score |
| structure | one line, one paragraph, short lines, a list, a long post, a thread |
| format | text, media, link, long |
Then it compares the top third with the bottom third on all three. Accounts with fewer than 5 posts collected are skipped rather than ranked on noise.
Step 5: say what it means, carefully
Report three things and no more:
- Which hook formulas over-index in the top third, with counts. Two formulas appearing four times each across six accounts is a finding. One appearing twice is not.
- What the top third share structurally that the bottom third do not: first-line length, one line vs a list, media vs text, link or no link.
- The unclassified hooks. Every hook the classifier could not name is
either noise or a formula
hooks.jsondoes not have yet. Read them by hand. This is the most valuable part of the output.
Then state the sample size in plain words. Forty posts across six accounts supports a claim. Twelve does not, and saying so is the difference between research and horoscopes.
Step 6: recreate them for the user
For the top three, write the user's version: their own story, their own
number, their audience, in the shape that is working. Read voice.md first.
Each one:
FOUND @someaccount · 6.4x · #7 The Hottest New · one line · text
"The hottest new design tool is a text file."
SHAPE The hottest new {familiar category} is {unexpected thing}.
YOURS The hottest new marketing hire is a skill file.Keep the found post's structure and none of its words beyond the frame. Run
each through /x-post (count, hook score) and /x-human before showing it.
Never hand back "make a post like this one". Hand back a post they could put
up tomorrow.
Output
The ranked list, the three findings, the unclassified hooks, and three
recreated posts. The swipe file goes to ~/.claude/x/swipe.md, where
/x-post and /x-plan read it, so after this runs once the rest of the pack
is working from the user's niche instead of from defaults.
Nothing is posted, liked, followed or messaged by this skill. It reads.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

