Organic growthblog 01

your account gets scored before your post does

the for you algo, from the source. what it reads, what to do

AAuny · Sep 2026 · 7 min readverified against the source · 2026-09-04
your account gets scored before your post does

X open-sourced the For You algo on 2026-08-13. The whole thing. Ranking, filtering, the weights, the shadowban mechanics.

[my claude read 400,000 lines of code so you don't have to]

Here's what's in it, and what to do with it.

how a feed gets built

Two pipelines run on every refresh:

  • in-network: recent posts from people you follow
  • out-of-network: posts the model (phoenix) thinks you'd engage with, found by embedding similarity and by which engagement clusters you sit in

Then, in order:

  1. your recent engagement history gets loaded. that's the main input. not your follower count, not your bio
  2. candidates get hydrated with text, media, author labels, counts
  3. 17 filters run before scoring. most posts die here
  4. phoenix predicts the probability you take each action on each post
  5. those probabilities get multiplied by weights and summed
  6. diversity decay, out-of-network discount and a small-account boost get applied
  7. top 50 survive, 35 get served

A post's score does not depend on what else is in the batch. Every cross-post effect is plain arithmetic applied afterwards, which is why those parts are readable in the code and the model itself is not.

what one action is worth

The score is a weighted sum of PREDICTED actions. Not counts of what already happened, not a ratio.

score = Σ (weight × predicted probability of that action)

actionweightin likes
copy-link share20.040×
reply from a mutual, on an original post20.040×
share via DM5.010×
reply5.010×
quote post5.010×
follow the author4.0
repost1.0
like0.5
click into the post0.40.8×
open a link0.20.4×
profile click0.00
bookmarkno weight exists0

Source: home-mixer/params/param.rs and home-mixer/scorers/ranking_scorer.rs. The like-equivalent column is weight ÷ 0.5.

Three things to take from the table:

  • a copy-link share is the heaviest thing that can happen to your post. People hit share and send it elsewhere = 40 likes' worth. Write posts worth sending to one person and ask for the send, not the save
  • a mutual's reply on your original post ties it. 5.0 base + 15.0 boost. It only fires on originals from people you follow back, never on your replies or reposts. Mutuals are a reach strategy
  • likes are the weakest real action. A like-optimized post is optimized for the cheapest signal on the board
Infographic 1: what one action is worth
what one action is worth

what carries no weight

Never cite any of these as a reason a post will reach further. Pursue them for audience or revenue reasons, not this one.

  • bookmarks / saves. There is no BookmarkWeight in the file. The model sees your bookmark count as an input feature; it contributes nothing to the sum
  • profile clicks. ProfileClickWeight = 0.0. They're where followers, clients and DMs start, so keep wanting them. They don't move the ranking
  • engagement rate. Not an input in any form. The ranker never divides engagements by impressions. A rate is a reporting artifact
  • impressions. An output, not an input, with one exception that runs backwards: the small-account boost needs fewer than 1,000 views to fire

the negatives: report > mute > block

actionweightin likes
report−234.0−468×
mute author−58.8−118×
not interested−43.2−86×
block author−31.2−62×

The severity order is report, then mute, then block. Block is almost negligible. The code comment says why: each weight blends how much the action is valued with how rare it is across the network, and reports are over 1,000× rarer than likes.

Two things people get wrong:

  • mass reports don't work the way people think. Recommendations are personalized, so reports from bad actors mostly change your ranking for them and people similar to them. Not for everyone
  • engagement groups = zero. Coordinating in a group chat and everyone going straight to the post to engage has zero ranking impact. An action only counts on a post served in someone's Home timeline. If you're in them, leave

the multipliers that move reach more than any single action

  1. out-of-network discount, ×0.75. Any post from an author the viewer doesn't follow. It applies to your replies and reposts even inside your own followers' feeds. Only original posts escape it
  2. author diversity decay. In one feed pull your 1st post scores ×1.0, your 2nd ×0.625, your 3rd ×0.4375, floor ×0.25. 2 to 3 of your posts won't show on someone's For You at the same time. Watch your posting cadence
  3. 48-hour age cut. Nothing older than 2 days enters For You. Evergreen is a search and profile strategy, never a For You strategy
  4. a second re-ranking (VMRanker) shuffles the top of the feed so similar posts don't sit next to each other. Running the same angle twice in a window is penalized by geometry, not just by author

And one that's in the code but switched off right now: posts older than 14 days get every engagement count zeroed before ranking. Likes, replies, reposts, quotes, views = reset to 0. If it ships, a random old post of yours going viral starts from scratch.

the filters that kill a post before it is scored

  • OONRetweetReplyFilter: your replies and reposts are removed from every non-follower's feed before scoring. A reply can only be recommended to someone who already follows you, and then it still takes the ×0.75 discount. Reply reach is capped at your existing audience by structure, so use replies to earn follow-backs, not impressions
  • DedupConversationFilter: one post per conversation survives, the highest scored. A thread gets one shot. Write it so the strongest post stands alone
  • SelfReplyChainFilter: your own self-reply threads are always kept. A comment you leave under someone else's post is only eligible for people who follow that account
  • promoted-only posts won't show up in organic feeds at all
Infographic 2: 17 gates before the score
17 gates before the score

small accounts: the one lever only you have

author_cold_start.rs, on by default. Every gate has to pass:

  • the post is an original, not a reply, not a repost
  • you have ≤ 1,000 followers
  • the post has < 1,000 views
  • it already ranks inside the top 85% of scored candidates

Then exactly 1 qualifying post per feed pull gets lifted to around rank 15. Under 1k, one of your originals gets a free lift into the middle of a stranger's feed on every refresh where you qualify.

Coming next, in the code but not live: thompson sampling on that boost. Today the slot goes to whoever scores highest. With sampling it becomes a dice roll weighted by your numbers, and posts with barely any views get the widest range of outcomes. Gear up new accounts 🤞🏻

reply spam and bot detection, from the un-redacted parts

  • your follower count decides what X does with the replies under your posts. Accounts at 30k+ get their comments scored for quality. Smaller accounts get theirs screened for spam
  • bot detection watches your rhythm. Nothing gets enforced under 30 logged actions. What flags you is the timing pattern of your actions, gaps included, learned by the model rather than written as a rule. There is no "X actions per hour" number to gamify, so don't try to find one

do this before your next post

  1. open x.com/i/under_the_hood and read the labels on your account. Shadowban mechanics are readable in plain code now, and this is where X shows you yours
  2. spend 10 minutes in real replies to people you'd follow back. Your history is the model's main input, so this is you telling it who you are today
  3. post one original with something worth sending to one person. Ask for the send
  4. put the link in the first reply, not the body. Open-link scores 0.2 and a bare link post carries a drop risk out of network
  5. wait 2+ hours before the next original, so your own posts don't compete inside one feed pull
  6. quote sparingly, and never quote your own posts for reach
Infographic 3: the 5-step routine
the 5-step routine

then read the repo yourself

github.com/xai-org/x-algorithm. Apache 2.0. Every number above has a file behind it, and @XOpenSource posts the release notes. Transparency has been happening a little at a time. Use it 🧡

stuck on this?

Content & Branding Strategy call

1 hour, your account open. $250.

Book it

1:1 call · matches this post

Content & Branding Strategy

want your account read against the code, signal by signal? 1 hour, your profile open, recording and follow-up notes included. Book the Content & Branding Strategy call.

60 minrecordingnotes after
Weights verified against xai-org/x-algorithm commit a389166 (param.rs sync 2026-08-12). Last checked 2026-09-04.Organic growth · blog 01