The VoiceMoat blog

Essays on voice, craft, and scaling without sounding like everyone else.

Opinionated, occasionally long, never generic. New posts every couple of weeks.

May 26, 2026

Why X feeds reject your third post of the day: author diversity and DPP

The home-mixer applies two diversity passes that no creator-facing article has explained. First, author_diversity_scorer.rs sorts candidates by weighted score, then walks the list applying an exponential decay multiplier per author occurrence: (1 - floor) * decay^position + floor. The first post from a creator gets the full score; the second gets decay; the third gets decay²; fast approaching floor. Second, vm_ranker.rs applies a Determinantal Point Process rerank at the top of feed when theta > 0, explicitly maximizing diversity-adjusted score across the visible top-max_selected_rank slots. Combined: a creator who posts 10 times a day has 7 of those posts hard-capped near the diversity floor. This article quantifies the decay curve, explains DPP in plain language, and rewrites the "how often to post" question into the right shape: post fewer times, with higher per-post voice distinctiveness.

VMVoiceMoat team
Read

May 25, 2026

48 hours in Thunder: why X recency is a window, not a boost

"Recency boost" is a myth that survived from 2020 Twitter advice into 2026. The 2026 algorithm has no recency multiplier in weighted_scorer.rs. What it has is a recency window: Thunder's post_store.rs retains posts for a default of 2 days, after which they fall out of the in-network candidate pool entirely. tweet_mixer_source.rs applies a similar age cutoff via MAX_POST_AGE. After that, posts can still surface via OON Phoenix retrieval but only if their embedding is strong enough. Combined with the three-layer impression bloom (previously-seen, previously-served, previously-seen-backup), recency in 2026 is binary: in the window or out of it. This article kills the multiplier myth, explains the window architecture, and gives a posting-cadence playbook that respects the 48-hour reality and the diversity scorer's per-author caps simultaneously.

VMVoiceMoat team
Read

May 24, 2026

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

Three of the twelve home-mixer sources are dedicated to surfacing posts from accounts the viewer does not follow: phoenix_source.rs (general OON retrieval), phoenix_moe_source.rs (mixture-of-experts variant), and phoenix_topics_source.rs (topic-keyed retrieval). All three call a two-tower model that embeds user history and candidate posts into a shared space and returns the top-K via dot product. A single OON_WEIGHT_FACTOR in oon_scorer.rs rescales those candidates against in-network ones for the final blend. This article explains the two-tower math, why OON is no longer a small fraction of the feed, and how a creator gets surfaced to non-followers. We finish with a concrete playbook: write embedding-distinctive copy, not generic engagement copy. The OON retrieval lane is the largest single growth surface a creator has on X in 2026.

VMVoiceMoat team
Read

May 23, 2026

Dwell time is the new like: the 4 dwell heads ranking your posts

The 2023 ranker had one weighted dwell-related term. The 2026 ranker has four. dwell_score is the discrete recap-dwell head (CLIENT_TWEET_RECAP_DWELLED, index 11). dwell_time is its continuous-regression sibling. click_dwell_time is dwell-after-click, a far stronger trust signal than the click itself. not_dwelled_score is the implicit penalty for scroll-past. Video has its own quality-view head (vqv_score, index 13) gated by MIN_VIDEO_DURATION_MS. This article unpacks each, explains why dwell is harder to game than likes (it is conditioned on history, not on social proof), and gives a writing playbook for posts that halt scroll: hook density, line-break rhythm, and the "second-line payoff" pattern. Voice tools that optimize headline-only metrics will systematically underperform on dwell.

VMVoiceMoat team
Read

May 22, 2026

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.

VMVoiceMoat team
Read

May 21, 2026

The negative-signal economy: how one mute outweighs 50 likes on X

NEGATIVE_SCORES_OFFSET and NOT_INTERESTED_WEIGHT are why the 2026 X ranker's math is subtractive, not additive. Net-negative posts get pushed through a separate score-offset branch in weighted_scorer.rs where the combined score is rescaled as (combined + NEGATIVE_WEIGHTS_SUM) / WEIGHTS_SUM × NEGATIVE_SCORES_OFFSET, so one predicted mute or not-interested overwhelms dozens of predicted likes. This article traces every negative signal: the four explicit weight terms, the implicit not_dwelled_score, the four hard-kill filters that run upstream of any scoring, and the off-voice-drift to mute pipeline. We close with a creator-specific section: what content patterns trigger followers to mute, why voice drift is the single biggest negative-signal driver, and how to detect drift before publish.

VMVoiceMoat team
Read

May 20, 2026

How Phoenix ranks every post: a creator's guide to the 19 engagement heads

X.AI's open-sourced Phoenix model does not score posts on a single "engagement" number. It predicts 19 separate user actions in parallel, each paired with a WEIGHT constant in home-mixer/scorers/weighted_scorer.rs (FAVORITE_WEIGHT, REPLY_WEIGHT, and 17 more): favorites, replies, quotes, reposts, photo expands, clicks, profile clicks, video quality views, three share variants, two dwell variants, follow-author, plus four negative actions and an implicit not-dwelled signal. A final weighted sum decides feed position. This article walks each head from the phoenix/run_pipeline.py source: which UI gesture trains it, which weight it pairs with, and what content patterns light it up. By the end, a creator understands why a post that gets 500 likes can rank below one with 80 likes and a 12-second dwell. We close with a quick framework for designing posts that fire multiple heads, not one.

VMVoiceMoat team
Read

May 19, 2026

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.

VMVoiceMoat team
Read

May 15, 2026

The reply guy playbook: how to use AI for Twitter replies (without sounding like a bot) in 2026

The short answer: use AI for replies the voice-rich way (voice-trained drafts you edit and ship at 5 to 10 a day), never the voice-corrosive way (automation at 30 to 100 a day). Reply automation at scale is voice-corrosive at the structural level; the audience pattern-matches automated reply patterns within scrolling distance and the writer's reputational capital collapses faster than any other content failure mode. The conviction-led playbook for AI-assisted Twitter replies in 2026 that does not sound like a bot: the voice-corrosive-versus-voice-rich split in reply tooling, the inline Chrome extension workflow that keeps the writer in the loop, three illustrative reply examples clearly labeled constructed, the bot-shape self-check, and the operational discipline that compounds reputational capital instead of collapsing it.

VMVoiceMoat
Read

May 15, 2026

How to repurpose tweets into LinkedIn posts (without sounding generic) in 2026

Cross-platform repurposing fails most often when the writer optimizes for LinkedIn's surface conventions and loses the voice that made the X content land. The tactical, example-rich playbook for repurposing tweets into LinkedIn posts in 2026: three structural moves (format conversion 280-char to 3000-char native, tone calibration without LinkedInfluencer cliches, audience-context adjustment from feed-scrolling to professional reading), illustrative before/after transformations clearly labeled constructed, and the voice-fidelity discipline that holds across both platforms.

VMVoiceMoat
Read

May 15, 2026

The 10 best Chrome extensions for Twitter/X creators in 2026

The best Chrome extensions for Twitter/X creators in 2026: the VoiceMoat extension for voice-trained reply drafting inline on x.com, plus Tweet Hunter Sidebar, SuperX, Buffer, Xposter AI, Postiz, Minimal Theme for X, ControlPanel for Twitter, Black Magic, and Dewey. Every pick is a real Chrome Web Store extension that works inside x.com itself, which removes the tab-switching friction that kills sustained cadence (popular tools like Postwise, Brandled, Hypefury, and the discontinued Hootsuite Hootlet are not current Chrome extensions, so they are covered in the exclusions, not ranked). Ranked by the category each one wins, with placement-discipline reasoning on the page (VoiceMoat at position two, not one) and pricing verified against vendor pages as of June 2026.

VMVoiceMoat
Read

May 15, 2026

How to build a Twitter content workflow using AI (step-by-step 2026)

Most AI Twitter workflows fail because they bolt the AI onto a pre-AI workflow rather than redesigning the workflow around what voice-trained AI actually unlocks. The tactical step-by-step build for a Twitter content workflow using AI in 2026: the five-stage canonical workflow (continuous seed capture, voice-trained drafting, edit-and-score, schedule-or-publish, sustained reply cadence), what tool sits at each stage, the screen-by-screen movements that compress per-post time from 40 minutes to 4 to 6, why a general AI assistant cannot run the workflow without collapsing stage two into helpful-assistant slop, and the operational discipline that keeps the workflow voice-rich rather than helpful-assistant-generic.

VMVoiceMoat
Read