本文へ移動
XGuide
SOURCE-BACKED FIELD GUIDE7fef3ba

See how X builds your For You feed.

A compact map of the open-source system — from candidate retrieval to ranking and final visibility checks. Every number links back to the exact code revision we audited.

Snapshot, not a promise about every live feed

This guide reflects the public repository at the audited commit below. Feature switches and A/B tests can override defaults for individual viewers or authors.

THE ONE IDEA TO GET RIGHT

“Copy link +20” does not mean one copy adds 20 points.

Phoenix predicts how likely this viewer is to copy this post's link. Ranking multiplies that predicted probability by 20. The same rule applies to likes, replies, reports, and the other action signals.

26weights
named home-mixer coefficients (22 are non-zero)
26filters
registered in the For You pipeline (some are off by default)
48hours
maximum age of For You scoring candidates
35posts
default organic results kept per request

01 / Overview

One request, several candidate sources, one ranking model

The feed is rebuilt for each request. Accounts you follow, discovery systems, and a shared popular-posts list contribute candidates; the same model then predicts your likely actions for every candidate.

Thunder

In-network

Thunder supplies recent posts from accounts the viewer follows.

Phoenix + SimClusters + Popular posts

Out-of-network

Phoenix retrieval, SimClusters, and the popular-posts list surface posts from accounts the viewer does not follow. Out-of-network replies and reposts are dropped by default.

xai-value-model + vm-ranker

Personalized score

Phoenix outputs predicted actions for this viewer; xai-value-model blends them, vm-ranker applies adjustments and diversity, and later stages filter the list.

02 / Pipeline

The request path, in execution order

Ranking is only one stage. A post can fail before scoring or disappear after selection.

  1. 01

    Understand the request

    Load recent viewer actions, follows, blocks, mutes, keywords, seen posts, and other context.

    home-mixer/query_hydrators
  2. 02

    Retrieve candidates

    Query Thunder, Phoenix retrieval, SimClusters, and the popular-posts list.

    home-mixer/sources
  3. 03

    Hydrate each post

    Attach post text, media, author data, labels, language, and engagement metadata.

    home-mixer/candidate_hydrators
  4. 04

    Filter before scoring

    Remove duplicates, old posts, blocked or muted authors, seen posts, inaccessible subscriber posts, and more.

    home-mixer/filters
  5. 05

    Predict and score

    Phoenix predicts likely viewer actions. The shared value model fuses them into a weighted score; vm-ranker recomputes it and applies author and network adjustments.

    xai-value-model/scoring.rs:69-140
  6. 06

    Diversify and select

    vm-ranker's DPP step zeroes unselected posts, then the top K by score are kept. If the vm-ranker call fails, local scores are served without these adjustments.

    vm-ranker/scoring/mod.rs:40-94
  7. 07

    Run final visibility checks

    Visibility filtering and conversation deduplication can still remove posts after their order is fixed.

    home-mixer/filters/vf_filter.rs

03 / Weights

All 26 home-mixer weights — plus 2 conditional boosts

Search the defaults mirrored in home-mixer/params/param.rs. Values multiply predictions, not counts; zero means the term adds nothing by default. The shared library has 3 more terms fixed at zero here, and vm-ranker/params.rs holds different static defaults for 5 weights: production values cannot be settled from public code alone.

  • 01

    Like

    FavoriteWeight
    +0.66
  • 02

    Reply

    ReplyWeight
    +5
  • 03

    Repost

    RetweetWeight
    +1
  • 04

    Expand photo

    PhotoExpandWeight
    +0.05
  • 05

    Open video

    VideoOpenWeight
    +0.02
  • 06

    Open post detail

    ClickWeight
    +0.3
  • 07

    Open external link

    OpenLinkWeight
    +0.2
  • 08

    Open author profile

    ProfileClickWeight
    0
  • 09

    Quality video view (VQV)

    VqvWeight
    0
  • 10

    Press share

    ShareWeight
    +2
  • 11

    Send by DM

    ShareViaDmWeight
    +5
  • 12

    Copy link

    ShareViaCopyLinkWeight
    +20
  • 13

    Dwell (binary)

    DwellWeight
    +0.05
  • 14

    Quote post

    QuoteWeight
    +5
  • 15

    Open quoted post

    QuotedClickWeight
    +0.05
  • 16

    Quality-view quoted video

    QuotedVqvWeight
    0
  • 17

    Dwell time per second

    ContDwellTimeWeight
    +0.006
  • 18

    Post-click dwell time per second

    ContClickDwellTimeWeight
    +0.4
  • 19

    Follow author

    FollowAuthorWeight
    +4
  • 20

    Not interested

    NotInterestedWeight
    -52.272
  • 21

    Block author

    BlockAuthorWeight
    -31.2
  • 22

    Mute author

    MuteAuthorWeight
    -58.8
  • 23

    Report post

    ReportWeight
    -234
  • 24

    Scroll past without dwelling

    NotDwelledWeight
    -0.02
  • 25

    Unexplored post

    PostUnexploredWeight
    +0.015
  • 26

    Post a video

    PostVideoWeight
    0
  • 27

    Mutual-follow reply boost

    BidirectionalFollowReplyWeightBoost
    +15
  • 28

    Mutual-follow dwell boost

    BidirectionalFollowDwellWeightBoost
    0

A zero default does not remove the model output. It only makes its direct contribution zero in the standard configuration.

Conditional boosts are separate from the 26 weights and only apply when their code conditions are met.

04 / Guardrails

A high score is not permission to show a post

Retrieval eligibility, filters, labels, and post-selection checks are separate from the weighted score. They can cap reach or remove a post entirely.

G-01

Age and duplication

For You candidates are deduplicated, and posts older than 48 hours are excluded. This applies to For You scoring candidates, not every surface on X.

home-mixer/filters
G-02

Viewer controls

Blocks, mutes, muted keywords, already-seen items, and subscription access are applied before scoring.

home-mixer/filters
G-05

Safety labels

Account and post labels feed visibility rules that can drop content or place it behind an interstitial.

visibility-filtering

Three common reading mistakes

One report cancels 468 likes.

False. X says so in its code comments and README: both weights multiply this viewer's predicted probabilities, not action counts. (The ratio is also about 355 now that the like weight is 0.66.)

External links are directly penalized.

No direct “link penalty” exists among the 26 weights. Open-link prediction has a small positive weight. Links could still affect other predictions; the weights alone cannot show that.

Replies can never reach non-followers.

By public default, out-of-network replies are dropped before scoring. But dedicated reply indexes and a flag (EnablePhoenixOonReplies) now exist, so this cannot be stated for experiments.

What changed on October 31, 2026

Updated from commit c65aa17 to 7fef3ba. 893 files changed between them; these are the changes that matter most to readers.

  • Scoring moved

    ranking_scorer.rs was removed. The arithmetic now lives in the shared xai-value-model library and is recomputed in vm-ranker.

    xai-value-model/scoring.rs:69-140
  • Weights changed

    Like 0.5→0.66, binary dwell 0→0.05, dwell time 0.004→0.006, post-click dwell 0→0.4, click 0.4→0.3, video open 0.05→0.02, VQV 0.05→0, unexplored 0.02→0.015, not interested −43.2→−52.272. Copy link stays 20; repost stays 1.

    home-mixer/params/param.rs:396-514
  • New source, more filters

    A popular-posts source is on by default (up to 500). Registered filters went from 21 to 26; the Brazil election filter was removed, and new ones include FairShareRanking (on) and FavHoldout (off).

    home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:420-444
  • New-author slot changed

    Followers ≤50,000 (was 1,000), under 200 home impressions (was 1,000), posted within 2 hours, chosen with Thompson sampling.

    home-mixer/params/param.rs:589-662
  • Engagement counts are model inputs

    The public training config now feeds log-scaled like, reply, repost, quote, and view counts to the model. Weights still multiply per-viewer predictions.

    phoenix/xrex/configs/xrecsys.py:316
  • Corrections to this guide

    We no longer say 48 hours applies to “all routes”, that replies are absent from every index, or that 10-second video earns VQV points by default.

    home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:427

05 / Sources

What is confirmed — and what is not

This guide separates source-confirmed implementation from assumptions about the live service.

Audited repository
xai-org/x-algorithm
Audited commit
7fef3ba19d82d1f76dec65f31b981ca817a2ea06
Parameter mirror
2026-10-28T16:00:35Z
Guide review date
2026-10-31

Confirmed: the public code and defaults at this commit, read for the core For You path; all files were inventoried by script, not every line read. Not confirmed: private services, undisclosed rules, Grox prompts, live experiment assignments, and the exact configuration served to any account.

Independent code analysis by Akira Papa. This is not an official statement from X.