Why am I
seeing this?
In August 2026, xAI published the code behind X's For You feed. This is the short version — what actually happens between your refresh and a post reaching your eyes.
Not made by X or xAI. Just a reader's guide to their open-source repo.
ranking_scorer.rs// every action you might take, weighted score = Σ ( weighti × P(actioni) ) // e.g. reply → +5.0 like → +0.5 report → -234.0
↑ that's the whole ranking idea, honestly
Those three numbers are real. They are sitting in a file you can open right now.
The whole thing in sixty seconds
Four things happen. If you only read one section, read this one.
Posts get gathered
From accounts you follow, and from accounts you don't. Two piles, thrown together.
A model guesses
For every single post it predicts: will you like this? reply? share it? mute them?
Guesses become one number
Each guess is multiplied by a weight and added up. Highest number goes to the top.
Separately, some get hidden
A different system decides whether a post is allowed to be shown to you at all.
The one thing people get wrong:ranking and hiding are two different systems. One decides the order. The other decides whether a post is allowed on your screen at all. They run separately, on different inputs, with different rules.
Where the posts come from
Every refresh pulls from two pools at once.
People you follow
in-network
A service called Thunder keeps recent posts sitting in memory as they're published, so it can hand over your follows' latest posts immediately.
Total strangers
out-of-network
Phoenix turns you and every post into vectors and finds the closest ones. SimClusters groups accounts by who engages with what, then pulls from your clusters.
…and then both piles get ranked by the same model, together, in one list.
What happens when you refresh
Seven steps, in this order, every single time you refresh. The repo calls it the Post Pipeline.
- 1
It looks you up
query hydration
What you recently engaged with, who you follow, who you block and mute, your muted words, what you've already been shown.
- 2
It fetches candidates
candidate sources
Thunder grabs recent posts from your follows. Phoenix and SimClusters go find posts from strangers. Both run at the same time.
- 3
It fills in the details
candidate hydration
Text, images, who wrote it, what language, engagement counts, whether it's subscriber-only.
- 4
It throws a lot away
pre-scoring filters
Duplicates. Anything older than 48 hours. Your own posts. People you blocked. Words you muted. Posts you've already seen.
- 5
It scores what's left
scoring
The model predicts every action you might take, and those predictions get combined into one number per post.
- 6
It keeps the best ones
selection
Sort by score. Keep the top handful. Everything else is gone.
- 7
It checks what's allowed
post-selection filters
Only now does it ask, post by post: is this one even allowed to be shown to you? Anything it says no to is dropped.
The part that decides the order
The model predicts a probability for roughly twenty different actions. Each one is multiplied by a weight, and the results are added together. That sum is the post's score — and you can play with the weights yourself.
The dials
Every number starts at the real production default from param.rs. Drag one and the feed on the right re-sorts as you drag.
Your feed
made-up posts, real arithmetic- 0.32
@stranger_who_writes · someone you don't follow
I spent six months rebuilding our deploy pipeline. Here is everything that broke, in order.
- 0.21
@wire_service · a link post
Court filing lands in the case everyone has been arguing about all week. Full document attached.
- 0.16
@posting_hours · a meme
nobody: / absolutely nobody: / my code at 4am:
- 0.13
@your_actual_friend · someone you follow
she found the one warm square of sun in the entire flat
- -0.40
@framework_wars · a spicy take
Unpopular opinion: the framework you like is actually bad and the one you hate is fine.
- -1.55
@reply_farm · engagement bait
Reply with your city and I'll tell you something about you. Only 1% will be brave enough.
Drag Not interested up to zero and watch the reply farm climb straight to the top. The negative weights are most of what keeps bait out of your feed.
The weights are just… sitting there
They're plain numbers in a file anyone can read. A few of them say a lot about what the feed is built to want:
A reply is worth 10 likes. 5.0 against 0.5. Conversation beats approval.
Copying a link to send someone is worth the most. 20.0 — more than a reply, a repost and a like combined.
Muting hurts more than blocking. −58.8 against −31.2. Quietly walking away is the stronger signal.
Plain dwell time is switched off. 0.0. Time-on-post, on its own, counts for nothing.
home-mixer/params/param.rsreply 5.0 quote 5.0 share via DM 5.0 share via link 20.0 follow author 4.0 share 2.0 repost 1.0 like 0.5 dwell 0.0 not interested -43.2 block author -31.2 mute author -58.8 report -234.0
↑ real defaults, straight out of the repo
Then three thumbs on the scale
After the sum, the score gets adjusted. Same author twice? Each extra post from them is worth less than the last. From a stranger? Multiplied down a little. A brand-new author? Given a lift, so new accounts aren't invisible forever.
The other system: what gets hidden
A separate service is asked about every surviving post: can this be shown to this person? It answers one of three ways.
Allow
Show it normally. Most posts, most of the time.
Interstitial
Show it, but behind a cover you have to tap through first.
Drop
Don't show it. You never learn it existed. So does anything replying to it, quoting it, or reposting it.
Where the labels come from
That decision reads labels — tags attached to posts and accounts by a whole separate set of systems running continuously in the background, nowhere near your refresh:
- Classifiers read posts, images and video as they're published.
- Account models score accounts on how others respond to them, on patterns of behaviour over time, and on their position in the follow graph.
- Rules react to events as they happen and stick labels on.
Plus your own settings: who you block, who you mute, words you've muted, your country, whether you've asked to see sensitive media.
The same post can go both ways
Some rules only fire when a post is being recommended to a stranger. If you follow the author, that same post comes through fine. Suspected spam gets caught aggressively on the recommendation path and left alone on the follow path.
Now go read
the real thing
Everything on this page is a simplification of code you can open yourself. The filters have names. The weights are numbers in a file. You can disagree with any of it — but now you know where to look.
It only looks like a black box from the outside.