Notas e fotos abaixo ☕
Cada vez que o For You atualiza, o X monta um feed novo para você em cinco etapas: busca até 2.800 candidatos, filtra, prevê como você reagiria a cada um, transforma isso em nota, corta os parecidos, reserva uma vaga para um post novo e entrega 35.
Tudo neste artigo vem do repositório xai-org/x-algorithm, que o X publica com os parâmetros de produção. A versão usada é de 21 de outubro de 2026. A figura abaixo mostra as cinco etapas montando o feed de uma usuária, a Bia.
Um detalhe de nome: Phoenix é uma família de modelos, não um sistema único. A busca Phoenix (etapa 1) encontra candidatos. O ranking Phoenix (etapa 3) prevê como você reagiria a cada um. Os dois usam a mesma base de transformer, daí o nome em comum.
O exemplo do artigo é um post da @ana, uma conta com 1.200 seguidores:
Com 12 minutos de vida, o post tem 3 likes em 20 views. É o ponto de partida do cold start, na parte 5.
Os candidatos vêm de quatro fontes:
| Fonte | O que traz | Máximo |
|---|---|---|
| Thunder | posts de quem você segue | 1.200 |
| Busca Phoenix | posts de fora da rede parecidos com o seu histórico | 1.000 + 200 novos |
| SimClusters | posts curtidos por pessoas com gosto parecido com o seu | 800 |
| Populares | posts em alta, só dos 0,005% maiores autores | 500 |
Para a @ana, isso significa: os 1.200 seguidores recebem o post via Thunder. Qualquer pessoa fora disso só vê o post se ele vier pela busca Phoenix ou por SimClusters.
A busca Phoenix e SimClusters funcionam com embeddings: cada usuário e cada post vira um vetor, e posts parecidos ficam próximos. Buscar candidatos fora da rede é buscar os posts mais próximos do seu vetor.
Seu vetor vem das suas últimas 1.022 ações. Na figura, você começa no centro, longe da @ana. Curta dois posts de café e o ponto preto se move até o círculo alcançar o post dela.
O texto do post não entra cru no modelo. O post vira um conjunto de códigos (semantic IDs) gerado a partir do texto, das imagens, da transcrição do áudio e do título do link. Dados do autor também entram: bio, selo, número de seguidores, país e idioma. A bio conta, mas o código não diz quanto.
A busca Phoenix só procura posts que estão nos seus índices. Post fora do índice não chega a quem não segue o autor.
Os índices têm nomes diretos: 1fav, para posts com pelo menos 1 like, e 32fav, para posts com pelo menos 32. Sem o primeiro like, o post da @ana não existe fora da rede dela. Com 32, entra num segundo índice.
SimClusters distribui o post para os grupos de quem curtiu. Então importa quem curte, não só quantos. Na figura, troque "gente de café" por "amigos aleatórios": o post continua chegando a gente, mas a gente que não liga para café.
Os candidatos passam pelos filtros do Home Mixer, o serviço que orquestra as cinco etapas. São regras fixas, sem modelo. Saem posts com mais de 48 horas, posts que você já viu e posts de autores que você bloqueou ou silenciou. Dois filtros importam mais.
Respostas e reposts de fora da rede são descartados. Uma resposta da @ana a uma conta grande nunca aparece no For You de quem não segue a @ana. Fora da rede, só circulam posts originais.
Rótulos tiram a conta do alcance fora da rede. Classificadores marcam posts e contas como spam, conteúdo adulto ou texto genérico de IA (llm_slop). Com um rótulo, o post sai do feed de quem não te segue, seja qual for a nota. O rótulo de texto genérico de IA dura 30 dias. Três posts adultos entre os cinco últimos rotulam a conta por 7 dias. Citar ou responder um post rotulado derruba o seu post também, inclusive para seus seguidores. A checagem de rótulos roda de novo no fim, sobre os posts já escolhidos para o feed.
O ranking Phoenix é um transformer derivado do Grok, com 8 camadas. Ele lê as suas últimas 1.022 ações e, para cada candidato, prevê a probabilidade de 64 ações: curtir, responder, repostar, copiar o link, abrir, ler até o fim, silenciar o autor, denunciar e assim por diante.
O ranking Phoenix não dá nota. Ele entrega só probabilidades, e elas são calculadas por par (leitor, post). O mesmo post da @ana recebe previsões diferentes para cada pessoa:
| Probabilidade prevista | Bia (segue contas de café) | Caio (só vê futebol) |
|---|---|---|
| curtir | 12% | 1% |
| responder | 3% | 0,1% |
| copiar o link | 0,5% | 0,02% |
| "não tenho interesse" | 0,1% | 1,5% |
| silenciar o autor | 0,05% | 0,4% |
| … mais 59 ações |
Valores ilustrativos. O código define o modelo e os pesos, não as probabilidades típicas.
Cada candidato é avaliado sem enxergar os outros candidatos (o código chama isso de candidate isolation). A previsão para o post da @ana não muda conforme os posts que disputam com ele. A comparação entre candidatos acontece na etapa seguinte.
As 64 probabilidades vão para o vm-ranker (value model ranker), um serviço separado. Ele faz três coisas, nesta ordem: transforma as probabilidades numa nota, aplica ajustes e corta os posts parecidos demais.
A nota é a soma de cada probabilidade multiplicada pelo seu peso:
| Ação | Peso | Em likes |
|---|---|---|
| Copiar link | 20 | 30× |
| Reply | 5 | 7,6× |
| Quote | 5 | 7,6× |
| Enviar por DM | 5 | 7,6× |
| Seguir o autor | 4 | 6× |
| Like | 0,66 | 1× |
| Salvar, clique no perfil, view de vídeo | 0 | 0 |
| Bloquear | −31,2 | −47× |
| Não tenho interesse | −52,3 | −79× |
| Silenciar | −58,8 | −89× |
| Denunciar | −234 | −355× |
Repost 1 · compartilhar 2 · tempo de leitura após abrir 0,4 por unidade · clique 0,3 · abrir link 0,2 · dwell 0,05 · expandir foto 0,05 · abrir vídeo 0,02 · rolar sem parar −0,02.
Salvar tem peso zero. Copiar o link vale 20, cerca de 30 likes. É a ação mais valiosa do sistema. O famoso "reply = 27 likes" vem do código de 2023, quando o reply pesava 13,5 e o like 0,5. Não vale mais.
Como as probabilidades são por leitor, a nota também é. Na figura, as probabilidades da tabela da parte 3 viram nota. Para a Bia, a maior contribuição não é o like, é o reply. Para o Caio, a probabilidade de "não tenho interesse" deixa a nota negativa.
Se autor e leitor se seguem e o post é original, o reply ganha +15 e passa a valer 20. Ligue Bia e @ana se seguem na figura: a barra do reply da Bia fica quatro vezes maior. O repositório registra a história desse número: testaram de 5 a 20, lançaram com 20 e baixaram para 15 em julho, depois de reclamações durante a Copa.
Na prática: seguir de volta quem comenta nos seus posts multiplica por 4 o peso do reply dessas pessoas. Seguir de volta quem nunca interage não muda nada, porque a P(reply) delas é perto de zero.
No preset rage bait, o post ganha mais likes e replies e mesmo assim a nota da Bia cai, porque P(não tenho interesse) e P(silenciar) sobem, e os pesos delas são −52 e −59. Considerando só likes, 1% de chance de "não tenho interesse" exige cerca de 80% de chance de like para compensar. Nota negativa põe o post abaixo de todos os positivos do feed.
O contrário também circula: uma denúncia cancela 468 likes, então denúncia em massa derruba qualquer conta. Essa conta usa o peso antigo do like (0,5); com o atual, seria 355. Mas a conta está errada de qualquer forma, e um comentário dos engenheiros no código explica por quê:
Depois da nota, dois multiplicadores:
Das 150 maiores notas, um algoritmo de diversidade (DPP) escolhe 50 que tenham nota alta e embeddings distantes entre si. Os não escolhidos recebem nota zero. Das 50, as 35 maiores notas vão para o feed.
Consequência: um post compete com posts parecidos, não só com posts melhores. Na figura, a @ana está entre os 50 escolhidos. Com dez posts sobre o mesmo assunto e nota um pouco maior que a dela, ela sai. Com um ângulo próprio, que leva o post para uma região vazia do espaço, ela volta, mesmo com nota menor que os vizinhos.
Esta é a regra que mais importa para contas pequenas.
Em cada feed, a 16ª posição pode ser ocupada por um post em cold start, escolhido entre os candidatos daquele feed. Para concorrer, o post precisa ser original, ter até 2 horas, menos de 200 views no feed, e o autor precisa ter até 50 mil seguidores. No código, essa regra roda dentro do vm-ranker, depois da nota.
O critério é a taxa de likes por view. Para não confiar em amostras pequenas, o código parte de uma taxa de 1,5% com peso de 50 views fictícias: a estimativa é uma distribuição Beta(0,75 + likes; 49,25 + views − likes).
Com 3 likes em 20 views, a estimativa é 5,4%, não os 15% da conta direta. As 50 views fictícias puxam a estimativa para baixo, mas 5,4% ainda é mais que o triplo do ponto de partida. Os botões mostram como cada like e cada view movem a distribuição.
A escolha não pega simplesmente a maior estimativa. É Thompson sampling: a cada feed, o sistema sorteia um valor da distribuição de cada post, leva os dois maiores sorteios para a final e escolhe o de maior nota. Posts com poucos dados às vezes ganham, e é assim que o sistema testa posts novos.
Dois detalhes do código:
| Afirmação | Veredito | No código |
|---|---|---|
| Hashtag aumenta alcance. | Mito | Nenhuma regra trata hashtags. São texto comum. |
| Salvar ajuda o post. | Mito | Peso zero. |
| Link externo é punido. | Mito | Abrir link vale +0,2. O X confirmou em julho de 2026 que não há penalidade. |
| Premium dá boost no ranking. | Em parte | Não há bônus no ranking. Mas o selo entra no embedding do post, e Premium tem prioridade oficial nos replies. |
| Clique no perfil conta como engajamento. | Mito | Peso zero. |
| Mandar o link num grupo para curtirem ajuda. | Em parte | Para a nota, não: só conta engajamento em post servido no feed. Para o cold start, os likes contam, limitados às views no feed. |
| Seguir de volta quem comenta ajuda. | Código | O reply de um mútuo vale 20 em vez de 5. |
| Postar várias vezes por dia derruba o alcance. | Mito | Se os posts forem espaçados, não. A penalidade de autor vale só dentro de uma atualização do feed, e cada post novo concorre ao cold start. |
O simulador junta as cinco etapas. O tamanho dos efeitos depende da audiência de cada conta, que o código não informa. Por isso o resultado é relativo ao cenário base da @ana, e cada configuração roda cinco vezes com variação aleatória.
Chega aos 1.200 seguidores via Thunder. Para chegar a mais gente, precisa do primeiro like para entrar no índice da busca Phoenix, e de 32 para entrar no segundo. Passa pelo filtro se não for reply e se a conta não tiver rótulo. O ranking Phoenix prevê, para cada leitor, as probabilidades de like, reply, copiar link, "não tenho interesse" e silenciar. O vm-ranker transforma isso em nota e zera os posts parecidos demais. E nas duas primeiras horas o post concorre à 16ª posição pela taxa de likes por view.
Os pesos mudam a cada poucas semanas. O repositório tem um segundo conjunto de pesos (like 0,5, "não tenho interesse" −47,5), e o código não diz qual está em produção. Em 19 de outubro de 2026, Elon Musk anunciou um modelo novo que prevê tempo gasto em cada post e leitura até o fim.
Quase todo número deste artigo é um feature switch: o código traz um valor padrão, mas o valor que vale é lido de um arquivo de configuração. O próprio arquivo de parâmetros avisa que os valores foram espelhados da configuração em 20 de outubro. Há cerca de 200 parâmetros no Home Mixer e 50 no vm-ranker, e 66 deles são liga/desliga, como ligar o sorteio do cold start, a fonte Populares ou a própria busca Phoenix.
30 segundos, por padrão. Os pesos, os limites de cada fonte e as regras do cold start mudam assim.Por isso o código mostra o mecanismo e os valores padrão, não necessariamente o que está rodando agora para você.
Os mecanismos tendem a durar mais que os números: nota por leitor, punição forte para feedback negativo, diversidade obrigatória e cold start baseado em likes por view.
home-mixer/params/param.rs (like 0,66). vm-ranker/params.rs (like 0,5) é diferente, e não se sabe qual está ativo.1fav, 32fav). O código que insere posts neles não está no repositório.
Código-fonte: xai-org/x-algorithm, commit 7f2ca2b, 21 de outubro de 2026.
Pesos e comentário sobre denúncias: home-mixer/params/param.rs, linhas 316–462.
Bônus de mútuos: home-mixer/params/param.rs, linha 347; docs/BIDIRECTIONAL_BOOST_CHANGE.md.
Cold start: home-mixer/params/param.rs, linhas 538–605; home-mixer/scorers/author_cold_start.rs, linhas 217–283.
Fontes de candidatos: home-mixer/params/param.rs, linhas 4–41 e 1016; home-mixer/util/popular_authors.rs, linha 11.
Funil e idade máxima: home-mixer/util/phoenix_request.rs, linha 20; home-mixer/params/config.rs, linhas 17, 19 e 40.
Phoenix: phoenix/README.md; entradas do embedding em grox/flows/mm_emb/renderer_v82.py.
Índices: phoenix-rankall/src/config/mod.rs, linhas 172–180.
DPP: vm-ranker/params.rs, linhas 249–252; vm-ranker/args.rs, linha 18; vm-ranker/scoring/dpp_model.rs, linhas 200–204.
Penalidade de autor e fora da rede: xai-value-model/scoring.rs, linhas 183 e 206; vm-ranker/params.rs, linhas 179–215.
Replies de fora da rede: home-mixer/filters/oon_retweet_reply_filter.rs.
Rótulos: abuse-enforcement-service/service-lib/rules/enforcement_user.yaml; safety-label-user-agg/postToUserLabelRules.strato; home-mixer/candidate_hydrators/vf_candidate_hydrator.rs.
Configuração em tempo real: home-mixer/params/param.rs, linha 1 ("mirrored from config feature-switch defaults"); vm-ranker/config_sync.rs e vm-ranker/args.rs, linha 49 (intervalo de 30 s); home-mixer/server.rs, linhas 182–193 (switches por leitor e sobrescrita por requisição).
Anúncios e cobertura: Elon Musk sobre o novo modelo de ranking, 19/10/2026; TechCrunch, "X abre o código e lança o Under the Hood", 13/08/2026; TechCrunch, dados de follow mútuo, 13/07/2026; Nikita Bier sobre links e sobre engagement bait, 2026.
Terceiros: Buffer, análise de Premium no X (18,8 milhões de posts) e de links, 2025.
Desenho das figuras: Kim, Reinecke e Hullman, CHI 2017; Hullman, Resnick e Adar, 2015; Segel e Heer, 2010; Conlen, Kale e Heer, 2019; estilo da fábrica inspirado em Colorfigures, de April Zhu.