[

[

x algorithm series

]

]

Out of network is the new in-network: how Phoenix retrieval surfaces unfollowed creators

·

·

13 min read

By Prateek Singh, founder of VoiceMoat

By Prateek Singh, founder of VoiceMoat

Summarize with AIClaudeChatGPTPerplexityShareShare

A creator with 5,000 followers and a viewer with 20,000 follows do not share many feed slots in the obvious way. The viewer sees a tiny fraction of any one creator's posts even when they actively follow them. The interesting question is how a viewer who does not follow the creator ever sees that creator's posts at all. The 2026 X ranker answers that question with three dedicated out-of-network sources, all running a two-tower retrieval model, scored against in-network candidates through a single redacted multiplier. The arithmetic of "how do unfollowed people see my work" runs through that retrieval lane. This article walks the 12 candidate sources in home-mixer/sources/, the three OON sources specifically, the two-tower architecture they share, and the playbook for writing copy that survives the dot product. Companion to the cornerstone A1: the May 2026 X algorithm and the the embedding-mechanics article A8.

The twelve candidate sources

The 2023 home-mixer worked with a small set of candidate sources, most of them tightly coupled to in-network retrieval and a handful of candidate-source-specific rerankers. The 2026 home-mixer has 12 candidate sources wired into the candidate-pipeline framework. Three of them are dedicated out-of-network ML retrieval.

Ten of the twelve candidate sources in home-mixer/sources/. Two additional sources are wired in but not enumerated here.

Source file

Type

Stage

thunder_source.rs (documented)

in-network organic

core

phoenix_source.rs (documented)

out-of-network ML retrieval (general)

core

phoenix_moe_source.rs (documented)

out-of-network ML retrieval (mixture of experts)

core

phoenix_topics_source.rs (documented)

out-of-network ML retrieval (topic-keyed)

core

ads_source.rs (documented)

paid

non-organic

who_to_follow_source.rs (documented)

follow recommendation module

non-organic

prompts_source.rs (documented)

platform prompts (full-cover, half-cover, inline, relevance)

non-organic

push_to_home_source.rs (documented)

notification-arrived hero injection

non-organic

tweet_mixer_source.rs (documented)

auxiliary mixing pool

support

cached_posts_source.rs (documented)

session-continuation cache

support

Source: home-mixer/sources/ inventory

Three of those (rows 2 through 4) form the out-of-network ML retrieval lane. Posts that arrive in a viewer's feed without the viewer following the author flow through one of these three sources. The remaining organic source, thunder_source.rs, is the in-network store maintained by the Thunder service (the the 48-hour retention window walked in A9); it covers posts from accounts the viewer follows.

The non-organic sources cover ads, follow recommendations, prompts, and notification-driven heroes. The detail on slot-competition between organic and non-organic candidates lives in A4: the five ways X steals your feed slots; this article focuses on the organic OON lane.

Two-tower retrieval, sketched

All three OON sources call a shared two-tower retrieval model defined in phoenix/recsys_retrieval_model.py. The two-tower architecture is the standard recommendation-system pattern: one tower encodes the user (the viewer, via their history sequence), another tower encodes the candidate (the post plus author), and the similarity score between the two embeddings determines retrieval order.

The OON retrieval flow. Twelve candidate sources feed the home-mixer pipeline. Three of them call the two-tower retrieval model. The dot product against the viewer's history embedding decides which OON candidates surface.

Candidate poolsglobal post index, topic-keyed pools, MoE shardsCandidate towerembedding of post + authorViewer statehistory sequence, actions takenUser towerembedding of viewer historyDot product, top-Kretrieval similarity rankingOON candidates surfaced to Phoenix rankerthen scored against in-network candidates via OON_WEIGHT_FACTOR

The retrieval mechanism is the same one Spotify, Netflix, Pinterest, and most modern recommendation systems use. The X-specific properties are the inputs to the two towers: the user tower consumes the history-sequence-plus-action-token format described in A8: your voice is an embedding; the candidate tower consumes the post-tokens-plus-author-hash format. Both towers project into the same learned embedding space.

The retrieval is exact-nearest-neighbour at small scale and approximate-nearest-neighbour at production scale. The implementation detail is not in the open repo. What is in the open repo is the input format and the output shape: a ranked list of candidate IDs from the OON pool, scored by similarity to the viewer's history embedding.

The new-user retrieval split

Phoenix retrieval has two variant configurations gated on viewer history length. The threshold parameter is referenced in the code as PhoenixRetrievalNewUserHistoryThreshold. Viewers whose history sequence is shorter than the threshold use a new-user retrieval path; viewers above the threshold use the power-user retrieval path. The distinction matters because the user tower cannot embed a coherent representation from a sequence that is too short.

The new-user retrieval path likely falls back to a more content-popularity-weighted retrieval, since the user-tower embedding is unreliable. The power-user retrieval path runs the standard two-tower similarity. The boundary value is not in the public source.

For creators, the practical implication: viewers who recently joined the platform see a substantially different OON candidate pool than long-term active viewers do. Posts whose voice-trained embeddings distinguish them on the power-user path may not surface on the new-user path, and vice versa. The two retrieval paths are different audiences with different filtering, and a creator's OON reach is a weighted mixture of both.

MoE: a second OON retrieval in parallel

phoenix_moe_source.rs is the mixture-of-experts variant of OON retrieval. The MoE architecture, in this context, means the retrieval model is split into multiple expert sub-models, with a gating mechanism that routes each query (the viewer's history embedding) to one or more appropriate experts.

The probable structure: different experts specialise in different content distributions (technical content, entertainment content, political content, news, lifestyle, etc.), and the gate selects the expert most relevant to the viewer's history pattern. The output is combined with the general-retrieval output for the final OON candidate pool.

The MoE variant is a second OON retrieval running in parallel to the general one. Both contribute candidates to the post-pool that gets scored by Phoenix. The split between them is not surfaced in the public source; production may weight one heavier than the other.

A note on the per-creator implication. The MoE setup matters because it means the answer to "which expert does my content get routed through?" depends on the viewer's history embedding, not on the post itself. A single post from a creator may surface to one set of viewers via the general retrieval and a different set via the MoE retrieval, because the gating decision is per-viewer. Creators whose audience clusters share a strong specialised expert (technical readers, news consumers, entertainment-first viewers) tend to benefit more from MoE retrieval because the routing concentrates their post in front of the expert that surfaces it most reliably. Creators whose audience is more generalist tend to benefit more from the general retrieval lane.

Topic retrieval and the topic-ID layer

The third OON source, phoenix_topics_source.rs, runs retrieval keyed on topic IDs. The topic-ID layer comes from the Grox content classification service (grox/), which assigns each post a topic ID based on its content. Viewers also have topic affinities inferred from their engagement history.

Topic retrieval is the lane that makes "topic-following" work mechanically. A viewer who has consistently engaged with posts in a specific topic class gets OON candidates from that topic surfaced via this lane, regardless of whether they follow the specific accounts posting in that topic.

For creators, topic retrieval is the most controllable OON lane: it is the one most directly responsive to "what is this post actually about?" Posts with clear topical anchors (specific subject matter, named entities, focused arguments) get cleaner Grox topic-ID classifications and surface more reliably in this lane. Posts with vague topical content drift in the topic-classification step and underperform on this lane.

OON_WEIGHT_FACTOR: the one knob that decides how much OON

After Phoenix scores all candidates (in-network plus OON), the home-mixer/scorers/oon_scorer.rs applies a single multiplier (OON_WEIGHT_FACTOR) to the out-of-network candidates' final scores. The factor exists. The factor's sign and existence are documented; the numeric magnitude is in the redacted params module and not in the open release.

The sign is a system-level lever: positive values upweight OON candidates relative to in-network; values below 1.0 downweight them. The value is presumably tuned to hit a target ratio of in-network vs out-of-network posts in a typical viewer's feed. Whatever that target is, it is a global parameter, not a per-creator one.

Two consequences for creators. First, the OON lane is not infinite-ROI for any specific post. The lane competes against in-network candidates in the final blend, with a fixed multiplier that does not adjust to post quality. A great OON-eligible post is still throttled by the multiplier. Second, the multiplier is the same across creators, so the relative performance of two creators in OON depends entirely on the similarity score before the multiplier applies. The retrieval-tower similarity is where the differentiation lives.

The three OON sources side by side

Source

Specialisation

Gating

Strongest for

phoenix_source.rs (documented)

general OON retrieval

viewer history threshold

creators with broad distributional reach

phoenix_moe_source.rs (documented)

mixture-of-experts retrieval

expert gate on history embedding

creators with deep specialisation in a content class

phoenix_topics_source.rs (documented)

topic-keyed retrieval

Grox topic-ID match

creators with clear topical anchors per post

Source: home-mixer/sources/phoenix_*.rs

Embedding-distinctive vs engagement-bait copy

The retrieval similarity score is the variable creators can move through writing. The mechanic is the embedding-space geometry described in A8: your voice is an embedding. The user tower's history embedding sits somewhere in the embedding space, anchored by the viewer's specific engagement pattern. Candidates that sit close to that anchor get high similarity scores.

The trap most creators fall into: writing "broadly engaging" content, which by definition occupies the dense centre of the embedding space. That dense centre is where every other generic-engagement post also sits. Hundreds of thousands of posts compete for top-K positions against any given viewer history embedding from that location. The top-K selection process is the dot product picking the closest few; the generic centre is far from most specific viewer anchors.

Voice-distinctive copy occupies sparser regions of the embedding space. Fewer competing candidates, but the geographically-relevant subset of viewer histories (the people whose anchors are near that region) gets served the candidate at higher similarity. The trade-off is range for density: voice-distinctive content surfaces to fewer viewers, but for each of those viewers the similarity score is higher, the score is higher per-impression, and the dwell-and-reply heads fire more reliably.

Retrieval-similarity distribution for two copy archetypes: Viewers with matching anchor: Engagement-bait copy (dense embedding centre) 12, Voice-distinctive copy (sparser region) 64 relative retrieval performance; Viewers with adjacent anchor: Engagement-bait copy (dense embedding centre) 22, Voice-distinctive copy (sparser region) 38 relative retrieval performance; Viewers with distant anchor: Engagement-bait copy (dense embedding centre) 14, Voice-distinctive copy (sparser region) 6 relative retrieval performance; Top-K survival rate: Engagement-bait copy (dense embedding centre) 9, Voice-distinctive copy (sparser region) 48 relative retrieval performance

Retrieval-similarity distribution for two copy archetypes

The chart sketches the qualitative split. Engagement-bait copy distributes its similarity scores broadly but rarely cracks the top-K for any specific viewer because the local competition (other generic posts) is intense. Voice-distinctive copy concentrates its similarity scores on the matching audience and survives top-K for a meaningful fraction of them.

The competitor positioning falls out of this analysis directly. Tweet Hunter's template library, by design, produces output in the dense engagement-centre cluster. The output is recognisable as viral-shaped, which fires the favorite head from the audience whose anchors are near the engagement-centre, but the same recognisability puts the output in dense competition for retrieval slots. Voice-trained output, by contrast, sits where the competition is sparser, and gains disproportionately on retrieval. The full four-tool comparison is in A10: VoiceMoat vs Tweet Hunter, Typefully, Hypefury.

A concrete scenario

To make the geometry visceral, here is a practical scenario. A creator writes about applied machine learning, posts roughly five times a week, and has built up a corpus of approximately 250 posts over the last twelve months. Their audience is a mix of practitioners, researchers, and adjacent technical operators. The creator's embedding cluster sits in a sparse region of the embedding space because the specific combination of "applied ML voice plus operator perspective" is not the broad-internet pretraining centre.

A typical post for them: "Three months running a model in production will teach you more about model evaluation than any paper. Here is the specific thing I learned from the failure modes."

That post, in the OON retrieval space, surfaces with high similarity to viewers whose history sequences contain ML-practitioner content, build-in-public engineering posts, and applied technical writing. The viewer pool with anchors near that region is small (a few hundred thousand viewers across X), but among those viewers the retrieval similarity is high, the top-K survival rate is high, and the downstream Phoenix scoring lands the post with strong predicted positives.

Compare to a generic-engagement version of the same idea: "Production ML is hard. What's the most valuable thing you learned the hard way?"

That post sits in the dense engagement-centre cluster. It surfaces to millions of viewers nominally, but the retrieval similarity is low for any specific viewer because the post is indistinguishable from many other generic-engagement posts competing for those slots. Top-K survival is low, the post often does not make the candidate pool that reaches Phoenix scoring, and even when it does the downstream predictions are weaker.

The aggregate score for the voice-distinctive post is higher than the aggregate score for the generic post, despite the generic post having greater nominal reach. The non-linear gain from retrieval similarity dominates the linear loss from narrower distribution.

What to do with this

Three operational moves for creators thinking about OON growth.

Write content that wears its specificity on its sleeve. Topic clarity (specific subject matter, named entities) helps the Grox-keyed topic-retrieval lane. Style clarity (consistent voice, identifiable phrasing) helps the general and MoE retrieval lanes.

Accept that distribution width and per-impression score trade off. Engagement-bait copy reaches more viewers and earns lower per-viewer score. Voice-distinctive copy reaches fewer viewers and earns higher per-viewer score. Total weighted score across an audience is usually higher for the voice-distinctive path because the per-impression score gain is non-linear in similarity; reach-without-similarity contributes little.

Do not chase OON_WEIGHT_FACTOR. It is a global multiplier outside any creator's control. The lever is retrieval similarity, which is upstream of the multiplier. Focus there.

The OON retrieval lane is the largest growth surface most creators have on X in 2026 because it is the lane that puts creators in front of viewers who do not follow them. The lane is dense, competitive, and embedding-driven. Voice consistency is the single most controllable variable that affects retrieval similarity. The cornerstone of this series opened with the structural argument; this article closes the loop on how that argument cashes out in the specific lane where unfollowed-viewer growth happens.

Frequently asked questions

Frequently asked questions

How does the X algorithm show my posts to people who don't follow me?

Through three dedicated out-of-network retrieval sources in home-mixer: phoenix_source.rs (general), phoenix_moe_source.rs (mixture-of-experts), and phoenix_topics_source.rs (topic-keyed). All three call a two-tower model that embeds your post and the viewer's history into a shared space and returns the closest matches by dot product.

Is out-of-network reach a small part of the X feed in 2026?

No. Out-of-network retrieval is the largest single growth surface most creators have, because in-network reach is capped by follower count while OON is bounded only by embedding similarity. A single OON_WEIGHT_FACTOR in oon_scorer.rs rescales OON candidates against in-network ones for the final blend.

What kind of content gets retrieved to non-followers on X?

Embedding-distinctive copy, not generic engagement copy. Engagement bait clusters in the dense centre of the embedding space and returns low retrieval similarity for any specific viewer. Voice-distinctive copy sits in sparser regions with higher similarity for fewer but better-matched viewers. This is inferred from the documented two-tower retrieval.

How does topic-based retrieval work on X?

phoenix_topics_source.rs keys retrieval on Grox content-classification topic IDs, so it is the out-of-network lane most responsive to a post's topical clarity. Vague, topic-mixed posts retrieve to fewer viewers than posts with a clear subject.

AI disclosure

AI disclosure

This article was drafted with AI assistance and human-edited by Prateek Singh. All technical claims are sourced to the xai-org/x-algorithm repository; file paths are cited inline.

More in the series

X Algorithm

The May 2026 X algorithm: why voice wins when the ranker becomes a transformer

In May 2026, X.AI open-sourced the next-generation recommendation algorithm under the xai-org/x-algorithm repository. It is not a re-host of the 2023 Twitter release. It is a complete rewrite. The 2023 stack of hand-engineered features, MaskNet heavy-ranker, SimClusters embeddings, TwHIN graph signals, and RealGraph follow-affinity scoring has been retired. In its place: a single Grok-derived transformer named Phoenix that predicts 19 separate engagement actions per candidate, conditioned on the viewer's history sequence, with a candidate-isolation attention mask. The implications for creators are structural, not tactical. Voice consistency now compounds at the ranker level because every candidate from a creator is independently scored against the viewer's per-creator history pattern. Voice drift collapses scoring across the entire follower base, not just the post that drifted. This cornerstone walks the architectural change, the new scoring math, and what it means for anyone choosing how to write on X in 2026.

13 min read

·

·

X Algorithm

Your voice is an embedding: how Phoenix encodes creator identity

Phoenix does not "see" your account as a username. It sees you as a hashed author ID combined with a post embedding, projected into a learned space. Every viewer who has interacted with you has a history sequence that contains those projections, paired with the action they took. When Phoenix scores any new candidate from you, the candidate-isolation mask lets that candidate attend to the viewer's full history but not to the other candidates in the batch. Net effect: your voice is encoded in two places: the author embedding itself, learned at training time, and the distribution of your posts in viewers' history sequences. Drift either of those and the model's prediction of you collapses. This article makes the math intuitive for a non-ML creator, and explains exactly what "voice fidelity" means in Phoenix-native terms: tight distribution in the post-embedding space, anchored by a stable author embedding.

17 min read

·

·

X Algorithm

The 5 ways X steals your feed slots before organic content gets ranked

Creators chase top-10 placement assuming there are 10 slots. There are not. Every rendered For You feed includes a who-to-follow module of up to 3 users, one or more ads spaced by MIN_POSTS_FOR_ADS, optional full-cover or half-cover prompts that take the top slot, optional push-to-home heroes if the user arrived from a notification, and cached-posts continuation slots from the prior session. By the time organic candidates are placed, the visible top-10 is often top-6 organic. This article inventories every non-organic source in home-mixer/sources/, the slot quotas where documented, and the safe-gap blending math from home-mixer/ads/safe_gap_blender.rs. We finish with a session-strategy section: when followers see your post, how much of the surrounding feed is theirs and not X's.

11 min read

·

·

X Algorithm

VoiceMoat vs Tweet Hunter, Typefully, Hypefury: which one writes for the 2026 algorithm

Three of the major AI tweet writers were built when the X ranker was a heuristic-plus-GBDT pipeline scoring each post on a single weighted scalar. Their templates, viral hooks, and engagement maximizers are calibrated to that world. In May 2026, X.AI open-sourced a Grok-derived transformer ranker that scores 19 separate engagement heads, applies negative-signal weights of equal magnitude, isolates candidates from each other in the attention mask, and conditions every score on the viewer's history sequence. The new moat is voice consistency across that history sequence, because consistency compounds per-creator across all 19 heads while drift triggers mute and not-interested with asymmetric penalty. This article compares Tweet Hunter, Typefully, Hypefury, and VoiceMoat against six 2026-algorithm criteria. The conclusion is structural, not feature-list: only one of the four is built on the voice-fidelity assumption the new algorithm rewards.

13 min read

·

·

The whole series

The X algorithm in May 2026: all ten articles

Read ›

Read ›

[

ready to start?

]

Create more.
Stay unmistakably you.
Grow from there.

3-day trial from $1 · Cancel anytime · Your writing stays private

[

ready to start?

]

Create more.
Stay unmistakably you.
Grow from there.

3-day trial from $1 · Cancel anytime · Your writing stays private

[

ready to start?

]

Create more.
Stay unmistakably you.
Grow from there.

3-day trial from $1 · Cancel anytime · Your writing stays private