I Ran X's Open-Source Algorithm and Found 7 Variables Creators Can Control

I Ran X's Open-Source Algorithm and Found 7 Variables Creators Can Control

@GoSailGlobal
CHINOhace 1 día · 16 may 2026

AI features

542K
18
0
6
17

TL;DR

An analysis of X's May algorithm update reveals how quality scores, dwell time, and community circles impact distribution, providing a roadmap for creators.

I ran X's recommendation algorithm open-sourced in May and found that the open-source part only explains 30% of the actual Feed ranking. The remaining 70% is hidden in server-side configurations, VM Ranker, and operational rules.

But this 30% of public code is enough to answer one question: what can creators actually control?

Original Repository: xai-org/x-algorithm (Updated May 15, adding 187 files and 18,263 lines of code)

This article won't repeat the algorithm overview (Punk2898's two posts are already very complete) but focuses on three things:

1️⃣ Counter-intuitive phenomena I observed while running the pipeline

2️⃣ The mechanisms in the May code update that have the greatest impact on creators

3️⃣ Specific operational suggestions based on these observations

Observation 1: Open-source ranking and the real Feed have almost zero correlation

Jason Zhu - inline image

I used the Phoenix model to run a corpus of 537,000 sports posts. The final score range given by the model was 0.0000 to 0.0015, extremely flat. Predicted probabilities for Fav, Reply, and RT were all close to zero; the ranking mainly relied on Dwell (stay time) as the signal to create a gap.

Then I scraped the real For You feed for comparison. Using Kendall's tau to calculate rank correlation, the result was -0.10.

This number means: using the demo weights in the open-source code (fav1.0 + reply0.5 + RT0.3 + dwell0.2) to predict the actual Feed ranking you see is about as accurate as guessing randomly.

In the real Feed, posts with zero interaction appear in the top 7, while posts with high interaction are pushed to 9th or 10th. Brand new posts published within 3 minutes with zero interaction can also enter the Feed.

What does this mean?

It means the open-source Phoenix model is only responsible for "initial candidate screening." What truly determines your rank in someone else's Feed is the subsequent re-ranking layers. The code open-sourced in May happens to complete the logic for these re-ranking layers.

Observation 2: A quality score of 0.4 is the invisible line of life and death

Jason Zhu - inline image

The newly added Grox module in May is the most critical part of this update. It's not a replacement for Phoenix; it's Phoenix's upstream supplier. After every new post is sent, Grox uses a VLM large model to do 5 things:

  • Assign a quality score (quality_score, 0 to 1)
  • Generate 7 boolean tags (adult content, violence, hate speech, etc.)
  • Assign a slop score (slop_score, levels 1-3)
  • Generate multimodal embedding vectors
  • Perform PTOS safety review

The code clearly states: quality_score >= 0.4 is required to pass the initial screening. Anything below 0.4 is labeled "low quality," and subsequent diffusion is hindered everywhere.

This 0.4 threshold is judged by the VLM model, not keyword matching. It can understand the meaning of your text, the content of your images, and video frames. Rule systems that could previously be fooled by "adding images and stacking keywords" no longer work.

slop_score is another new weapon: templated content, low information density, and posts with obvious AI-generated traces will receive high scores. Level 1 is normal; levels 2-3 mean the algorithm thinks you are "watering down" content.

Observation 3: Swiping away is an active penalty, not just "not seeing it"

Jason Zhu - inline image

The May version upgraded behavioral signals from 18 discrete heads to 19 discrete heads + 8 continuous auxiliary heads. The new continuous heads predict fine-grained metrics like "how long stayed" and "reading completion rate."

But the signal with the biggest impact on creators is: not_dwelled.

Previously, we thought "no user interaction" was neutral, equivalent to not being seen. Wrong. A user quickly swiping past your post is an active negative signal, and the algorithm will penalize you for it.

This means:

  • Failing to grab attention in the first 1 second of a video = active penalty
  • An uninteresting first sentence in a long post = active penalty
  • Images without visual impact = active penalty

While observing the real Feed, I noticed a phenomenon: some zero-interaction posts could enter the Top 7, while some high-interaction posts were pushed back. A reasonable explanation is: those zero-interaction posts, while not liked, were actually stayed upon by users (generating a dwell signal), whereas some posts that look like they have good data actually had a large number of quick swipes.

Observation 4: Who you follow determines which circle the algorithm puts you in

Jason Zhu - inline image

The May code added mutual_follow_jaccard_hydrator, which calculates the "similarity of the mutual follow circle between you and a certain author."

If you and an author follow many of the same people (high Jaccard coefficient), the algorithm considers you to be in the same "information circle" and is more inclined to push their content to you.

This mechanism changes a fundamental assumption: it used to be "content quality determines distribution"; now it's "content quality + circle belonging jointly determine distribution."

Specifically:

  • Every account you follow is calculating your circle identity
  • Following randomly is equivalent to diluting your circle tags
  • Mutual follows with KOLs in the same field are far more effective than one-way follows of 100 random accounts
  • High-quality comments under big V posts will enter the following_replied_users signal chain, and your avatar might appear in the "people you follow also commented here" prompt

My own For You feed confirms this: over 60% of recommended content comes from creators in the Chinese AI circle because my follow list is concentrated in that circle.

Observation 5: The comment section is now an independent track

Jason Zhu - inline image

The May code revealed an independent scoring system for the comment section. Each comment is scored 0-3 by Grok:

  • 3 points: Comments with information increment that can trigger discussion
  • 2 points: Normal interaction
  • 1 point: Short but not spam
  • 0 points: Triggers the spam tag, affecting account credit

A 0-point comment isn't just collapsed; it leaves a record on your account that you "once posted a spam comment." Long-term accumulation may affect your overall account weight.

At the same time, spam comments under your post also affect the weight of the main post. Comments like "follow for follow," "first," or "+1"—the algorithm doesn't just dislike them; it lowers the distribution of your main post because of them.

Conversely, the exposure value of a high-quality comment might be greater than posting 10 ordinary posts yourself. Leaving a data-backed, discussion-triggering comment under a big V's post is equivalent to borrowing the big V's traffic entrance.

Observation 6: Caching strategies make "when to post" more subtle than "what to post"

Jason Zhu - inline image

There's a detail in the code: when the number of posts in the cache pool is >= 500, the system skips all real-time post-pulling logic from Thunder/Phoenix/TweetMixer and directly returns cached content.

This means: for heavy users who open X dozens of times a day, many of their requests don't go through the recommendation algorithm at all; they see an old list in the Redis cache.

A post you just sent might be completely invisible to these heavy users. Your content only has a chance to enter when the cache refreshes next.

This also explains a counter-intuitive phenomenon: some accounts post dozens of times a day, and their traffic isn't bad. This is because high-frequency posting increases the probability of "being selected in a certain cache refresh." However, Punk2898 predicts this strategy will be adjusted later.

For ordinary creators, the suggestion is: post 10-30 minutes before the peak activity of your target audience, so your post has a better chance of being included when the cache refreshes.

Observation 7: MediumRisk is the hidden weight reduction you don't know about

Jason Zhu - inline image

The advertising system code revealed the brand_safety_verdict variable for the first time. It has four levels: Safe / LowRisk / MediumRisk / HighRisk.

Key discovery: The default value is MediumRisk.

In other words, if your post hasn't been fully reviewed by Grox (or tags are missing), the system treats you as "Medium Risk" by default. Medium Risk posts aren't directly blocked, but they are avoided next to advertisements. And positions around ads are often high-exposure areas (user visual focus areas).

The result is: you never receive any violation notice, but your exposure is already being discounted. This is the most easily overlooked "hidden shadowban" in the v2 algorithm.

How to avoid it? Posts with clear themes and no "edgy" content are more likely to be quickly classified as Safe. After posting an important post, wait 30-60 minutes for the review to finish before doing heavy promotion.

Creator Action Checklist

Jason Zhu - inline image

Based on the 7 observations above, here are specific actionable steps:

Regarding Content Quality

The first 10 words of each post determine dwell or not_dwelled. You must create a cognitive gap or data impact in the first sentence. Starting with "I learned a little trick today" directly triggers a swipe-away.

Content should have clear arguments, information density, and a sense of structure. The 0.4 quality score threshold isn't high, but "templated + low info + a few words with a picture" filler posts definitely won't pass.

Avoid AI template feel: uniform sentence structures, fixed openings ("First... Second... Finally"), and grand endings will be detected by slop_score.

Regarding Circle Operations

Audit your follow list. Unfollow random accounts not in your target circle. Every follow shapes your Jaccard coefficient.

Mutually follow 5-10 core accounts in your target circle. Mutual follow weight is much higher than one-way follows.

In the circle's big V posts, leave comments with information increment. Not "learned it," but supplement a data point, share a counter-example, or ask an extension question.

Regarding Comment Section Management

Regularly clean up spam comments under your posts. Ads and meaningless replies will lower the weight of the main post.

Don't spam your presence under irrelevant posts. 0-point comments leave a spam record on your account.

Regarding Posting Timing

Post 10-30 minutes before the peak activity of your target audience. Leave a window for the cache refresh to include you.

Wait 30-60 minutes after an important post before promoting it. Let the Grox review finish to upgrade from default MediumRisk to Safe.

Regarding Quote Retweets

Be cautious about quoting marginal content. The v2 VF joint liability mechanism will cause weight reduction from penalized posts to spread to you along the quote chain.

Use screenshots + your own comments for controversial content instead of direct quotes.

Regarding Hashtags

Identify 1-2 core Grok topics and consistently create around them. New users' discovery streams are strictly filtered by topic; if you're not in their topic set, you don't exist to them.

Occasionally use # explicit tags to strengthen the algorithm's topic classification.

Regarding Video

The first 1 second of a video is the line of life and death. The not_dwelled signal is most obvious in videos.

Important content must have a text-only version. Some users have "see fewer videos" filters enabled, and posts with video duration fields will be cut out entirely.

Reference links:

https://github.com/xai-org/x-algorithm

https://x.com/punk2898/status/2013538743467286981

https://x.com/punk2898/status/2055439323693289598

More patterns to decode

Recent viral articles

Explore more viral articles

Creado para creadores.

Encuentra ideas en artículos virales de 𝕏, descubre por qué funcionaron y convierte esos patrones en tu próximo ángulo de contenido.