August 14, 2026 · infographic
The For You feed ranks what you might do next
X published the production For You ranking code. Phoenix does not count likes. It predicts the probability that this viewer will copy a link, reply, quote, follow, mute, or report — then a published weighted sum turns those probabilities into one score.
X published the production code that builds the For You feed. The interesting part is not a leaderboard of tricks. It is the scoring model itself.
Phoenix does not rank popularity. It guesses what you will do next, then a public formula turns those guesses into one number.
What actually shipped
On 13–14 August, xai-org/x-algorithm added the pieces that decide what you see: ranking weights, visibility filtering, the systems that label posts and accounts, SimClusters retrieval, and the Phoenix training code.
The request path is straightforward once you stop treating “the algorithm” as a single blob.
- Hydrate the viewer — recent actions, follows, blocks, mutes, already-seen posts.
- Retrieve in parallel — Thunder (accounts you follow), Phoenix embeddings (accounts you don’t), SimClusters (engagement-similarity clusters).
- Filter hard — older than 48 hours, duplicates, muted keywords, blocked authors, seen posts, and more.
- Score — Phoenix predicts many actions.
RankingScorerweights them. - Adjust — author-diversity decay, an out-of-network discount, a new-author boost, then a diversity rerank.
- Select top K, then visibility filtering can still drop the post or put it behind an interstitial.
- Blend ads, Who to Follow, and prompts into the ranked organic list.
Thunder is how a post reaches people who already follow you. Phoenix and SimClusters are how it reaches anyone else. Both get ranked by the same model.
The formula people are misreading
score = Σ (weightᵢ × P(actionᵢ | you))
The weights are in home-mixer/params/param.rs. The arithmetic is in ranking_scorer.rs.
Today’s repo note is the part worth sitting with. Those weights multiply this viewer’s predicted probability of an action. They do not multiply raw counts. Report is weighted −234 and like is 0.5, but that does not mean one report cancels 468 likes. Reports are rare, so the weight has to be large or the prediction would barely move the score. The model is also personalized: a report from someone unlike your audience mostly changes ranking for people like that reporter.
Mass-reporting campaigns are weaker than they look for a second reason. Only actions on posts served in Home Timeline count. Coordinating via a group chat and opening the post directly does not feed the ranker.
What the published weights actually are
| Action | Weight |
|---|---|
| Share via copy link | 20.0 |
| Reply on an original post from a mutual | 20.0 (5 + 15 boost) |
| Reply · quote · share via DM | 5.0 |
| Follow author | 4.0 |
| Share · repost · like | 2.0 · 1.0 · 0.5 |
| Report | −234 |
| Mute · not interested · block | −58.8 · −43.2 · −31.2 |
The bidirectional reply boost is easy to undersell. For an original post from someone you follow back, reply weight becomes 5 + 15 = 20 — tied with copy-link. It does not apply to replies or reposts. That is a conversation bonus for mutuals, not a reply-farming bonus.
Dwell is weaker than most “watch time” folklore. The binary dwell weight is 0. The continuous dwell-time weight is 0.004. Video quality view is 0.05. Profile click is 0. Likes are real, but cheap.

The three adjustments after the sum
A high weighted score is not the final rank.
Author diversity. The second post from the same author in the slate is decayed; later ones fall toward a 0.25 floor. Flooding the timeline is scored as a defect.
Out-of-network discount. Posts from accounts you do not follow are multiplied by 0.75. The same discount is applied to in-network replies and reposts. Originals from people you follow keep the full score. That is a quiet but sharp incentive: write posts, don’t only live in other people’s threads.
New-author boost. Accounts under about 1,000 impressions and 1,000 followers, with a post younger than 24 hours, get lifted toward slots 15–16. It is a short window, not a career plan.
After that, VMRanker runs a determinantal point process over embeddings. It will give up a little score to keep adjacent posts from looking the same.
If you write on X, the list is shorter than it looks
The growth-hack reading of this repo is “do the high-weight action.” The adult reading is: the model is asking whether this person would send the post to someone else, answer it, or want more of you.
- Write things people copy and send. Unique framing, a usable list, a sharp claim, a thread that survives being pasted into a group chat.
- Design for replies and quotes, especially from mutuals. Ask a real question. Leave a thought unfinished enough that someone competent wants to finish it. Then answer them.
- Stay in a recognizable niche. Out-of-network reach is embedding similarity. If your last twenty posts do not point at the same kind of reader, Phoenix has less to retrieve you for.
- Post when your people are around, and talk to the first wave. Thunder only holds recent posts, and everything older than 48 hours is gone.
- Space the work. The diversity decay is not a rumor.
- Avoid content the model would predict as mute, “not interested,” block, or report. Polarizing material can still work if the right people copy and quote it. Low-signal outrage is how you buy a −234 prediction.
Likes still happen. They are just not what the ranker is optimizing for.
Ranking is not visibility
A high score can still disappear. Visibility filtering is a different service with different inputs: labels from Grox, media models, account-level scorers, Scarecrow rules, the viewer’s blocks and mutes, subscriber-only status, country rules. Its answers are allow, drop, or interstitial.
Some rules only fire when the post is a recommendation from someone you do not follow. The same post can be fine for a follower and dropped as a suggestion. That is why “it did well with my audience and died everywhere else” is often a labeling problem, not a ranking problem.
X is pairing the code with Under the Hood, which shows aggregate visibility labels on your account and posts. The useful move is to read a label and then find the rule, not to treat the dashboard as a mystery score.
What this is, and what it isn’t
The repo is unusually honest for a consumer feed. The training code is there. The production defaults are synced into param.rs. The missing pieces — some Grox prompts, some Botmaker rules — are the ones most useful for gaming enforcement.
Weights will change. The 13 August release said experiments at a notable share of traffic should show up in the repo. Treat this post as a reading of the public code as of 14 August 2026, not as a permanent physics of X.
The durable fact is simpler. For You is not a popularity contest that happens to use AI. It is a Grok transformer asking, for each post and each viewer: what will this person do? The published weights tell you which answers it currently cares about.
Copy-link is 40 likes. A thoughtful reply from someone you follow back can be worth as much as a copy. A report is not a nuclear veto. And the same post is a different number for every person who might see it.
That is the feed.
Source: github.com/xai-org/x-algorithm. Related: the context rocket equation on what models actually pay attention to, and the home mainframe on where the intelligence sits.
Also worth your time
