X Algorithm 2026: How Phoenix Ranks the For You Feed
Internal teardown report on the open-source release xai-org/x-algorithm (May 15, 2026) — the For You feed algorithm of X (formerly Twitter) in 2026, with four audience-tuned growth recommendation tracks (personal/founder, brand/company, generalized framework, client/consulting deliverable). Pivot thesis: « The famous 2023 weight table — replies count more than likes by a big multiplier — describes a system that no longer exists in this form. » The 2026 algorithm is a transformer (Phoenix, Grok-1-derived) that learns weights from your engagement history, scored against a 19-dimension multi-action surface, gated by an offline content-understanding service (Grox). The shape of scoring now matters far more than the numbers — and the numbers themselves are not in the public release. 4-component architecture: (1) Home Mixer (Rust, request-time orchestrator, hydrate → source → filter → score → select → filter); (2) Thunder (Rust, Kafka-fed in-memory store of recent posts, sub-ms lookups for in-network candidates); (3) Phoenix (JAX ML, two-tower retrieval + ranking transformer, ~Grok-1-derived); (4) Grox (offline, spam/safety/PTOS/banger classifiers + multimodal v5 embedder). The 19 actions predicted by Phoenix (key change vs. 2023): favorite, reply, repost, photo_expand, click, profile_click, vqv (video quality view gated by min duration), share, share_via_dm, share_via_copy_link, dwell, quote, quoted_click, follow_author, not_interested, block_author, mute_author, report, dwell_time (continuous). Final score = Σ (weight × P(action)) modified by 3 structural multipliers: (a) OON_WEIGHT_FACTOR < 1 (out-of-network penalty), (b) author diversity decay(1-floor) × decay_factor^position + floor (exponential attenuation of repeated posts from the same author within a single render), (c) video duration gate (vqv only contributes if video_duration_ms > MIN_VIDEO_DURATION_MS). Key caveat: no numeric weight value (FAVORITE_WEIGHT, OON_WEIGHT_FACTOR, AUTHOR_DIVERSITY_DECAY, MIN_VIDEO_DURATION_MS...) is in the release — everything is crate::params::, managed by an internal X feature-switch service for A/B testing. « Anyone telling you 'replies are worth N.N× more than likes in 2026' is fabricating a number that is not derivable from the OSS release. »Key differences vs. 2023: (1) removal of every hand-engineered feature (« We have eliminated every single hand-engineered feature and most heuristics from the system »*); (2) a single model predicting 19 actions vs. multiple single-action models; (3) Grox separates content understanding from ranking; (4) new first-class signals (continuous dwell, gated vqv, follow_author, 3 share variants); (5) two-tower OON retrieval (vs.
By Rapport interne **non signé**// Source raw.githack.com ↗/Reading 2 min/.md// Auto-verified translation
On May 15, 2026, xAI open-sources xai-org/x-algorithm, X's For You feed algorithm. This internal report turns it into a two-part technical teardown: (1) a system breakdown with file:line citations, and (2) four growth recommendation tracks segmented by audience (personal/founder, brand, generalized framework, consulting deliverable).
Pivot thesis: the famous "2023 weight table" ("replies count more than likes by a big multiplier") describes a system that no longer exists. The 2026 algorithm is a transformer (Phoenix, Grok-1-derived) that learns weights from personal engagement history and scores each candidate against a surface of 19 distinct actions, gated by an offline service (Grox). The shape of scoring matters more than the numbers — and the numbers are not in the release.
The famous 2023 weight table — replies count more than likes by a big multiplier — describes a system that no longer exists in this form.
The 19 actions predicted by Phoenix combine positives (favorite, reply, repost, click, profile_click, gated vqv, share, share_via_dm, share_via_copy_link, dwell, quote, quoted_click, follow_author, continuous dwell_time) and negatives (not_interested, block, mute, report). Final score = Σ (weight × P(action)) modified by 3 structural multipliers: OON_WEIGHT_FACTOR < 1 (out-of-network penalty), author diversity decay(1-floor) × decay_factor^position + floor, and video duration gate (vqv only contributes if video > MIN_VIDEO_DURATION_MS).
Key caveat: no numeric weight value is in the release (everything is crate::params::, no params.rs). « Anyone telling you 'replies are worth N.N× more than likes in 2026' is fabricating a number. »* Only the directions (sign, gate vs. soft adjustment, presence) are citable.
Three layers of reach: Eligibility (binary, Grox) → Retrieval (probabilistic, two-tower) → Ranking (continuous, weighted sum). Two laws of mechanical growth: (1) In-network is multiplicative, OON is additive; (2) The model's job is to predict you, not reward you.
Differences vs. 2023: removal of hand-engineered features, a single model for 19 actions vs. multiple models, Grox separates understanding from ranking, new first-class signals (continuous dwell, gated vqv, follow_author, 3 share variants), two-tower OON retrieval with multimodal embeddings. Eligibility-time exclusion is the silent killer: borderline content is no longer demoted, it disappears from the candidate pool with no signal to the creator.
Honesty boundary: released checkpoint = mini (2 layers, 4 heads, 256-dim, 537K sports-post corpus), Thrift stubs (panic!("Not implemented")), policy data absent. The report should be treated as a structural model, not a quantitative predictor.
Key takeaways
Primary source. open-source release xai-org/x-algorithm on May 15, 2026. The report is dated 2026-05-16 (likely D+1 of the release). Watch-file addition date: 2026-05-16 (= today).
Thunder. (x-algorithm/thunder/) — Rust Kafka-fed in-memory store of recent posts, sub-millisecond lookups for in-network candidates. Key files: thunder/main.rs, thunder/post_store.rs, thunder/kafka_utils.rs.
Phoenix. (x-algorithm/phoenix/) — JAX ML service, two roles: (1) two-tower retrieval for OON, (2) ranking via a Grok-1-derived transformer predicting 19 actions.
Grox. (x-algorithm/grox/) — offline content-understanding service, classifiers (spam, safety, PTOS, banger, reply ranking) + multimodal v5 embedder. Does not sit in the hot path; writes to the feature store, Home Mixer hydrates the signals.
Home Mixer pipeline (architecture quoted from README). 1. Query hydration (User Action Sequence + User Features) 2. Candidate sources (Thunder in-network + Phoenix retrieval OON + ads + who-to-follow + topics + MoE + prompts) 3. Hydration (core metadata, author info, media, engagement counts) 4. Pre-scoring filtering (dedupe, age, self, blocks, mutes, paywall, already-seen) 5. Scoring (Phoenix Scorer P(action) for each of 19 actions → Weighted Scorer Σ(weight × P) → Author Diversity → OON Scorer) 6. Selection (sort by final score, select top K) 7. Post-selection filters (VFFilter for deletes/spam/violence/gore, conversation dedup)
The 19 actions predicted by Phoenix. (phoenix/runners.py:233-252, home-mixer/candidate_pipeline/candidate.rs:30-51PhoenixScores):
New first-class signals vs. 2023. continuous dwell_time (not just binary), vqv_score (gated by MIN_VIDEO_DURATION_MS), follow_author_score (Phoenix predicts "will this post earn its author a follower"), 3 share variants (share, share_via_dm, share_via_copy_link).
Score formula. (home-mixer/scorers/weighted_scorer.rs:44-91): ` score = Σ_i (weight_i × P(action_i)) × OON_WEIGHT_FACTOR (if OON, else 1) × diversity_multiplier(position) + offset_score() (keeps negative aggregates well-ordered) ` where vqv_weight is replaced by 0 if video_duration_ms ≤ MIN_VIDEO_DURATION_MS.
CRITICAL caveat — the weights are not in the release.
FAVORITE_WEIGHT, REPLY_WEIGHT, RETWEET_WEIGHT, OON_WEIGHT_FACTOR, NEW_USER_OON_WEIGHT_FACTOR, AUTHOR_DIVERSITY_DECAY, AUTHOR_DIVERSITY_FLOOR, MIN_VIDEO_DURATION_MS, NEGATIVE_SCORES_OFFSET, WEIGHTS_SUM, NEGATIVE_WEIGHTS_SUM are all referenced as crate::params::*.
No params.rs exists in the repo. (verified via exhaustive grep -rn).
Managed by an internal X feature-switch / parameter service for A/B testing and tuning without code changes.
Implication. only the directions (positive vs. negative, gate vs. soft adjustment, presence vs. absence of a multiplier) are citable. Magnitudes are fabricated.
3 structural multipliers. (more important than individual weights):
OON penalty. (oon_scorer.rs:20-23): score = base_score × OON_WEIGHT_FACTOR if OON else base_score. Comment on line 7: « Prioritize in-network candidates over out-of-network candidates ». Codification of "followers matter".
New-user OON exception. (ranking_scorer.rs:220-239): if account < NewUserAgeThresholdSecs AND follows ≥ NEW_USER_MIN_FOLLOWING, the OON penalty is replaced by NEW_USER_OON_WEIGHT_FACTOR. Structural bias on what new accounts see (and therefore what new accounts can reach).
Author diversity decay. (author_diversity_scorer.rs:29-31): multiplier(position) = (1 - floor) × decay_factor^position + floor. Position = number of posts by the same author already appearing higher in the sorted list. An author's best post keeps its score, each subsequent one is attenuated exponentially without dropping below floor. Cadence implication: structural, not heuristic.
Video duration gate. (weighted_scorer.rs:72-81): vqv_score only enters the weighted sum if video_duration_ms > MIN_VIDEO_DURATION_MS. Hard gate, not soft penalty: clips that are too short simply don't receive the VQV contribution.
What never enters the ranker. (invisible lost reach):
Pre-scoring filters.DropDuplicatesFilter, CoreDataHydrationFilter, AgeFilter, SelfpostFilter, RepostDeduplicationFilter, IneligibleSubscriptionFilter (paywall), PreviouslySeenPostsFilter, PreviouslyServedPostsFilter, MutedKeywordFilter, AuthorSocialgraphFilter (bidirectional block, including the quoted author of a quote tweet).
Fundamental architectural point.« Borderline content doesn't get 'demoted' in the 2026 system. It gets disqualified at hydration time and never reaches scoring. This is materially different from the 2023 system's reduced-reach / visibility-filtering model. »
What Phoenix actually learns from.
The most consequential input = the user's action sequence. (user_action_seq_query_hydrator.rs), not the candidate post.
Candidate-isolation attention. (phoenix/recsys_model.py): candidates can attend to the user's action sequence, but not to each other → per-user per-post, batch-independent, cacheable scores.
No single global "this post is good"."the same post predicted to earn a like from User A at probability p₁ is predicted at p₂ for User B".
Going viral. = a population-level outcome of independent personal predictions, not an optimized metric.
Hand-engineered features removed. (README line 55): "We have eliminated every single hand-engineered feature and most heuristics from the system."
Two signals explicitly hydrated. nonetheless: mutual_follow_jaccard_hydrator.rs (Jaccard of viewer followers ∩ candidate author followers), following_replied_users_hydrator.rs (someone the viewer follows replied to the candidate).
OON retrieval (two-tower). your action history → user embedding, candidate posts → post embeddings (from grox/embedder/multimodal_post_embedder_v5.py, which encodes text+images+video ASR transcript into a normalized 1024-dim vector). Your discoverability by strangers is a function of embedding proximity between your posts and the ones your target audience already engages with.
5 load-bearing differences vs. 2023. 1. No hand-engineered features (2023 had explicit verified status, paid subscribers, network distance). 2. A single model predicting 19 actions vs. multiple single-action models. 3. Grox separates content understanding from ranking (grox/plan_master.py orchestrates 9 parallel plans). 4. New first-class signals (continuous dwell, gated vqv, follow_author, 3 share variants). 5. Two-tower OON retrieval (vs. 2023's SimClusters + heuristics). ### 7 pillars (recurring across Personal / Brand / Framework) 1. In-network advantage (oon_scorer.rs:20-23) — OON × factor < 1. 2. P(action) framing (phoenix/recsys_model.py) — per-user probabilities. 3. High-weight actions (weighted_scorer.rs:49-67) — choosing which of the 19 to trigger. 4. Diversity decay (author_diversity_scorer.rs:29-31) — (1-floor) × decay_factor^position + floor. 5. Negative signals (weighted_scorer.rs:64-67 + AuthorSocialgraphFilter + MutedKeywordFilter) — direct subtractions + hard gates. 6. Two-tower retrievability (phoenix_source.rs + multimodal_post_embedder_v5.py) — embedding proximity to your target audience. 7. Grox / VF eligibility (grox/plan_master.py + home-mixer/filters/vf_filter.rs) — silent exclusion, not demotion. ### Personal / Founder Recommendations (Part 2.A) — summary
Pillar 2. name one target action per post (reply, follow, dwell, share). "When you can't articulate which action you're aiming at, the post is unlikely to score well for any of them."
Pillar 3. trigger personal high-weight actions:
Reply: questions with a defensible answer (not "what do you think?").
Dwell time: threads and long-form content (continuous dwell signal, index 18).
Profile click: a stranger wanting to know who you are (bio-relevant signaling).
Follow-author: "here is my premise and I will defend it across many future posts".
Pillar 4.publish your best post first (the 1st keeps full score, the 2nd is attenuated). Don't stack, space them out.
Pillar 5. avoid mutes/blocks from warm followers (a cumulative negative on all your future posts for that user).
VQV. (index 6) = videos that clear MIN_VIDEO_DURATION_MS. "Cutting a video too short kills the contribution entirely."
Share via DM. (index 8) + share via copy-link (index 9) = pricing teardowns, product comparisons, controversy forwarded privately.
Follow-author (index 13) = one follow-magnet post per week.
Pillar 4.« A 'drumbeat' of four posts spaced 30 minutes apart underperforms the single best one of them, alone ». Coordinating brand + CEO + employees (distinct authors) beats brand posting alone twice.
Pillar 5.home-mixer/ads/ module added May 15, 2026 = brand-safety tracking. Organic posts near sensitive content → adjacency risk.
Pillar 6.topical consistency over weeks (embedding diluted if too many topics), multimodal posts, subtitle videos for the ASR path.
Pillar 7.task_spam_detection.py keys on low-follower / low-quality reply patterns → brands that reply heavily on big posts can get flagged. Reply substantively or not at all. ### Generalized Framework (Part 2.C)
Three layers of reach. 1. Eligibility (Grox + filters) — binary, in/out, no optimization beyond not being excluded. 2. Retrieval (two-tower OON) — probabilistic, optimized by what you post (topic, embedding, multimodal). 3. Ranking (weighted sum + multipliers) — continuous, optimized by how you post (action triggered, cadence).
Action surface as product question. 19 actions = 4 categories (social: like/reply/quote/share; private: DM-share, copy-link, dwell, photo expand; identity: follow, profile click; rejection: not-interested/block/mute/report). A post that targets no relation = predicted ~0 across the board.
Transformer as fairness mechanism. per-user probabilities → "good content" is not a global property. Probabilistic targeting, not deterministic quality.
Author-diversity decay as structural feature.« publishing more posts per day past a threshold reduces, not increases, total reach ». Optimal cadence is non-monotonic in post count.
Negative signals as one-shot vetoes. a mute costs the post AND every subsequent one to that user (a permanent entry in their action sequence).
Eligibility-time exclusion = silent killer. no signal to the creator when a Grox classifier excludes. Diagnosis = comparative reach analysis.
Two laws.
Law 1.In-network is multiplicative, OON is additive. Followers compound on every future post.
Law 2.The model's job is to predict you, not reward you. Engagement-baiting / manufactured controversy → degrades your predictability → downgrades future posts. ### Consulting Deliverable (Part 2.D) — key points
Executive summary. ready for the cover page.
Evidence table. 14 main claims, each with file:line.
7 recommended interventions ordered by expected impact. (all directional): 1. Action-targeted content design (target_action annotated in the editorial calendar). 2. Author distribution playbook (audit cadence vs. decay, multi-account amplification). 3. Video specification (MIN_VIDEO_DURATION_MS client-side A/B test, subtitles). 4. Topic-embedding consistency (70/30 core/exploratory). 5. Eligibility-gate audit (sample underperforming posts → check gate types). 6. Negative-signal hygiene (quantify cumulative cost of mute rate). 7. Follower-acquisition reframing (OON-to-Thunder conversion = multiplicative future reach).
Limitations and honest disclosures (mandatory). weights not derivable, mini checkpoint (2 layers, 4 heads, 256-dim), Thrift stubs (panic!("Not implemented")), brand-safety lists / topic ID mappings / language penalties / ad blending rules absent. « The client should treat this report as a structural model, not a quantitative predictor. » ### Honesty Boundary (Appendix A.3) — what we CANNOT know
Numeric weight values. (all external, no params.rs).
Production model behavior. released checkpoint = 2 layers, 4 heads, 256-dim, 537K-post sports corpus, prod Phoenix is larger and continuously trained.
Stub integrations.panic!("Not implemented: to_thrift for ...") in candidate_features.rs and user_features.rs. The public code does not run end-to-end against X's internal services.
Convergence with [[wallace-wells-nyt-magazine-ai-populism-altman-backlash-no-one-ready-2026-05-08]]. the report factually documents the structural mechanics of an algorithm that shapes political information at mass scale, whereas Wallace-Wells documents the popular reception / backlash against tech oligarchs (including Musk). The report shows that "who reaches whom" is now determined by transformers trained on personal action sequences — and that silent exclusion (eligibility-time, no signal) is a deliberate mode of operation.
Convergence with [[ng-the-batch-352-no-ai-jobpocalypse-2026-05-08]]. same anti-narrative epistemic posture, discipline of "what is derivable from the facts vs. what is fabricated". Ng dismantles the jobpocalypse narrative; this report dismantles growth-hack narratives built on fabricated weights.
Implicit convergence with [[mensch-mistral-commission-enquete-vulnerabilites-numeriques-souverainete-ia-2026-05-13]]. Mensch discusses dependence on foreign digital services as a vassalization risk. The xai-org/x-algorithm release is an ambiguous precedent — a partial open-sourcing of a system that governs public conversation, but with the operational parameters (the weights) intentionally absent.
Anti-narrative growth-hack. this report is the documentary response to the "X algorithm secrets / 5 tactics to game the For You feed" industry. Discipline of file:line citation vs. anecdote.
Anthropic-vs-X transparency pattern. this report can serve as a methodological comparison point for assessing the relative transparency of major labs' algorithm releases (Anthropic Mythos, OpenAI evals, xAI grok-1, xai-org/x-algorithm). Form of transparency: enough code to describe the architecture, not enough parameters to reproduce the behavior.
Attributed claims
params.rs (valeurs des poids) est absent du release open-source
— rapport interne
quiconque cite des magnitudes de poids 2026 fabrique des chiffres
— rapport interne
l'exclusion eligibility-time est silencieuse pour le créateur (no signal)
— rapport interne
in-network is multiplicative, OON is additive
— rapport interne
the model's job is to predict you, not reward you
— rapport interne
The knowledge graph extracted from this fiche — 38 entities, 51 relations.