<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Moonment</title><link>https://moonment.net/en/</link><description>Public notes, projects, and long-term thinking from Moon.</description><generator>Hugo</generator><language>en-US</language><managingEditor>Moon</managingEditor><webMaster>Moon</webMaster><copyright>© 2026 Moonment</copyright><lastBuildDate>Tue, 18 Aug 2026 17:00:55 +0800</lastBuildDate><atom:link href="https://moonment.net/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Moon Media Lab</title><link>https://moonment.net/en/projects/moon-media-lab/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/projects/moon-media-lab/</guid><description>A local-first tool that turns local video or public links into verifiable transcripts, subtitles, structure, knowledge, and reuse packages.</description><content:encoded><![CDATA[<p>Moon Media Lab owns the path from a video source to a reusable analysis package: acquisition, transcription, cleanup, decomposition, packaging, and export.</p>
<p>Speech recognition runs locally. LLM-assisted cleanup and analysis are optional, with provenance recorded in the output. The project is not a permanent knowledge base, voice lab, final video renderer, or publishing system.</p>
<h2 id="boundaries">Boundaries</h2>
<ul>
<li>Inputs may be local videos or public links.</li>
<li>Outputs include transcripts, subtitles, structured knowledge, and downstream briefs.</li>
<li>Original media and private instances stay local by default.</li>
</ul>
]]></content:encoded></item><item><title>Moon Video Cast</title><link>https://moonment.net/en/projects/moon-video-cast/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/projects/moon-video-cast/</guid><description>A structured content-package workflow for producing vertical video that stays inspectable and easy to revise.</description><content:encoded>&lt;p>Moon Video Cast is an engine for turning text into vertical video. Topics, scripts, storyboards, narration, rendering, and quality checks all move through one structured content package.&lt;/p>
&lt;p>Reusable methods, schemas, and templates live in the public repository. Account content, rendered episodes, schedules, and private media stay in local instance directories.&lt;/p>
</content:encoded></item><item><title>Moon Agent Skills</title><link>https://moonment.net/en/projects/moon-agent-skills/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/projects/moon-agent-skills/</guid><description>Reusable Agent Skills from Moon workflows; methods may be public while identities and instances remain isolated.</description><content:encoded>&lt;p>Moon Agent Skills collects operational methods and validation contracts used across agents. Each Skill installs independently and works through explicit triggers, boundaries, and checks.&lt;/p>
&lt;p>The public repository contains reusable methods only. Accounts, browser identities, private media, result packages, and workspace configuration stay outside it.&lt;/p>
</content:encoded></item><item><title>Moon Voice Lab</title><link>https://moonment.net/en/projects/moon-voice-lab/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/projects/moon-voice-lab/</guid><description>A local-first voice asset lab for designed or authorized cloned voices, versioning, review, and safe narration exports.</description><content:encoded>&lt;p>Moon Voice Lab separates voice design, authorized cloning, listening review, and narration export from downstream video projects.&lt;/p>
&lt;p>Human reference audio, identity information, authorization files, models, and generated results stay out of Git by default. Permission to learn a voice never automatically grants permission to publish it.&lt;/p>
</content:encoded></item><item><title>Reading X's new algorithm at the source: what actually gets recommended?</title><link>https://moonment.net/en/notes/x-algorithm-2026/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/notes/x-algorithm-2026/</guid><description>A source-level read of X's Phoenix, Home Mixer, and scoring parameters — what the ranker actually predicts, and which content strategies a creator can verify.</description><content:encoded><![CDATA[<p>I reread the recommendation code X published. Like most people, I wanted a simple answer first: between likes, replies, and retweets, which one matters most?</p>
<p>The code does not answer with an engagement scoreboard. What the new system actually does is predict, based on a given user&rsquo;s past behavior, which actions they might take after seeing a post — and then combine those predictions into a score.</p>
<p>Which means the thing a creator optimizes is not one kind of engagement count, but this: <strong>whether the content reaches the right people, and whether those people take a real action that matches it.</strong></p>
<div class="tldr">
<p>In short</p>
<ul>
<li><strong>Weights are not an exchange rate.</strong> Each published weight multiplies a predicted probability for the current viewer, not engagement that already happened.</li>
<li><strong>Current published defaults.</strong> Favorite 0.5, retweet 1.0, reply 5.0 (plus 15.0 for original posts from mutually followed authors), DM share 5.0, copy link 20.0, follow author 4.0, report −234.0.</li>
<li><strong>Ranking is not the last step.</strong> Author diversity decay, an out-of-network discount, and a 48-hour age filter all apply afterward, so posting similar content repeatedly does not stack reach linearly.</li>
<li><strong>Source.</strong> <code>xai-org/x-algorithm</code> at commit <code>b089ce64</code> (2026-08-17 snapshot); production may still run experiment parameters.</li>
</ul>

</div>

<p>This note is based on commit <a href="https://github.com/xai-org/x-algorithm/commit/b089ce64891f9c50fab73aa00dbe65acb82f198f"><code>b089ce64</code></a> of X&rsquo;s official repository, dated 2026-08-17. The public code will keep changing and production carries experiment parameters, so what follows is a source snapshot you can check again — not a permanent set of platform rules.</p>
<h2 id="how-does-a-post-reach-the-for-you-feed">How does a post reach the For You feed?</h2>
<p>The published architecture splits candidates into two main sources:</p>
<ol>
<li><strong>In-Network</strong>: accounts you already follow, served recent content by Thunder.</li>
<li><strong>Out-of-Network</strong>: accounts you do not follow yet, surfaced mainly through Phoenix Retrieval and SimClusters.</li>
</ol>
<p>Those candidates enter Home Mixer, where they pass through filtering, feature hydration, and Phoenix ranking. Based on the viewer&rsquo;s recent interaction history, Phoenix predicts probabilities for each candidate across many actions: favorite, reply, retweet, share, dwell, follow the author — and also not-interested, block, mute, and report.</p>
<p>The official README states the core calculation as:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Final Score = Σ (weight_i × P(action_i))
</span></span></code></pre></div><p>After ranking, the system still applies author diversity decay, an out-of-network discount, new-author exploration, and further reordering. Duplicates, already-seen posts, content past an age threshold, and anything caught by visibility rules can also be filtered at various stages. The full pipeline can be checked against the official <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/README.md#system-architecture">System Architecture</a> and <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/README.md#scoring-and-ranking">Scoring and Ranking</a> sections.</p>
<p>The older system read more like an engineering stack of many candidate services, large aggregated feature sets, and layered rankers. The new one keeps its filters and tunable parameters, but Phoenix moves &ldquo;understand the user&rsquo;s behavior sequence and predict the next action&rdquo; much closer to the center.</p>
<h2 id="weights-are-not-an-exchange-rate-for-engagement">Weights are not an exchange rate for engagement</h2>
<p>Among the current published defaults, a few parameters draw attention:</p>
<table>
  <thead>
      <tr>
          <th>Predicted action</th>
          <th style="text-align: right">Published default weight</th>
          <th>Boundary worth noting</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Favorite</td>
          <td style="text-align: right">0.5</td>
          <td>Multiplies the current viewer&rsquo;s predicted favorite probability</td>
      </tr>
      <tr>
          <td>Reply</td>
          <td style="text-align: right">5.0</td>
          <td>Original posts from mutual follows currently get an extra 15.0</td>
      </tr>
      <tr>
          <td>Retweet</td>
          <td style="text-align: right">1.0</td>
          <td>Cannot be converted directly into actual like counts</td>
      </tr>
      <tr>
          <td>Share via DM</td>
          <td style="text-align: right">5.0</td>
          <td>Weights a predicted share probability</td>
      </tr>
      <tr>
          <td>Copy link</td>
          <td style="text-align: right">20.0</td>
          <td>A high weight is not a request to farm shares</td>
      </tr>
      <tr>
          <td>Follow author</td>
          <td style="text-align: right">4.0</td>
          <td>Still gated by the model&rsquo;s predicted probability</td>
      </tr>
      <tr>
          <td>Report</td>
          <td style="text-align: right">-234.0</td>
          <td>A large negative weight, but not &ldquo;one report cancels 468 likes&rdquo;</td>
      </tr>
  </tbody>
</table>
<p>These values come from <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/params/param.rs#L298-L474"><code>home-mixer/params/param.rs</code></a> at the pinned commit.</p>
<p>Putting a few of them back into the source makes it easier to see that they are simply defaults of configurable parameters:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">FavoriteWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_favorite_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">0.5</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">ReplyWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_reply_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">BidirectionalFollowReplyWeightBoost</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">f64</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;rust_home_mixer_bidirectional_follow_reply_weight_boost&#34;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="mf">15.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">RetweetWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_retweet_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">ShareViaCopyLinkWeight</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">f64</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;rust_home_mixer_share_via_copy_link_weight&#34;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="mf">20.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">ReportWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_report_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mf">234.0</span><span class="p">);</span><span class="w">
</span></span></span></code></pre></div><p>The easiest misreading is to treat 20, 5, and 0.5 as an exchange rate for real engagement. Comments in the source reject that interpretation explicitly: a weight multiplies a probability or continuous value the model predicts <em>for the current viewer</em>, not an interaction that already occurred. Reports are much rarer than likes, so that prediction needs a far larger absolute weight before it can affect the final score at all. The calculation itself can be checked in <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/scorers/ranking_scorer.rs#L417-L551"><code>ranking_scorer.rs</code></a>.</p>
<p>The mutual-follow reply boost deserves the same care. The current code adds reply-prediction weight for original posts from authors you mutually follow, but X&rsquo;s own <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/docs/BIDIRECTIONAL_BOOST_CHANGE.md">change log</a> also documents that the parameter went through A/B testing and several adjustments. It proves real relationships are part of ranking. It does not prove that bulk mutual-following buys reliable distribution.</p>
<p>The boost applies only to original posts from mutually followed authors; replies and retweets never enter that branch:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">bidirectional_boost_eligible</span><span class="p">(</span><span class="n">candidate</span>: <span class="kp">&amp;</span><span class="nc">PostCandidate</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">bool</span> <span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">candidate</span><span class="p">.</span><span class="n">in_reply_to_tweet_id</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">candidate</span><span class="p">.</span><span class="n">retweeted_tweet_id</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">candidate</span><span class="p">.</span><span class="n">is_mutual_follow_author</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">reply_weight_for</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">candidate</span>: <span class="kp">&amp;</span><span class="nc">PostCandidate</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">f64</span> <span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">bidirectional_follow_reply_weight_boost</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mf">0.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="bp">Self</span>::<span class="n">bidirectional_boost_eligible</span><span class="p">(</span><span class="n">candidate</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">reply</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">bidirectional_follow_reply_weight_boost</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="bp">self</span><span class="p">.</span><span class="n">reply</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><h2 id="so-what-is-more-likely-to-be-recommended">So what is more likely to be recommended?</h2>
<p>The code offers no viral template, but it does rule out some wrong directions and support a few sturdier judgments.</p>
<h3 id="1-make-it-clear--to-the-system-and-the-reader--who-the-post-is-for">1. Make it clear — to the system and the reader — who the post is for</h3>
<p>Phoenix uses the viewer&rsquo;s behavior history to model interest, then judges whether a candidate is relevant. For a creator, consistency does not mean writing the same topic every time. It means the content keeps serving one recognizable group of people and problems.</p>
<p>If an account discusses AI tooling today, retweets an unrelated joke tomorrow, and jumps to an unfamiliar field the day after, individual posts may still get recommended — but the account will struggle to build continuous, legible audience feedback.</p>
<h3 id="2-offer-natural-high-intent-actions">2. Offer natural high-intent actions</h3>
<p>Replies, DM shares, copy-link shares, and following the author all enter scoring. Rather than mechanically asking for likes and retweets at the end of a post, the more useful question is: is this worth saving somewhere else, sending to a colleague, or answering with your own experience?</p>
<p>A tutorial can leave executable steps. A source analysis can leave accurate links and stated boundaries. An opinion piece needs to give the reader a specific judgment they can respond to. The action should follow from the value of the content, not be squeezed out by a call-to-action formula.</p>
<h3 id="3-do-not-treat-conflict-engagement-as-a-growth-shortcut">3. Do not treat conflict engagement as a growth shortcut</h3>
<p>The system also predicts negative actions — not interested, block, mute, and report — and the visibility system independently handles spam, safety labels, and other restrictions.</p>
<p>Manufacturing arguments may produce short-term replies, but nothing in the code supports &ldquo;all engagement is good engagement.&rdquo; If content attracts the wrong audience, the model can just as easily learn that it tends to generate negative feedback from similar users.</p>
<h3 id="4-avoid-publishing-near-identical-content-in-quick-succession">4. Avoid publishing near-identical content in quick succession</h3>
<p>The current defaults enable author diversity decay: when the same author appears repeatedly, scores for later candidates are progressively reduced, down to a floor ratio. Out-of-network content carries an additional discount, and the age filter threshold listed in the README is 48 hours.</p>
<p>These mechanisms support a plain judgment: important content needs timely, real feedback, but publishing several near-identical posts in a row does not simply stack impressions. The code also offers no universal &ldquo;best time to post.&rdquo;</p>
<h2 id="how-i-would-verify-any-of-this">How I would verify any of this</h2>
<p>Source code explains mechanisms; it cannot replace your own account data. I would rather turn this into a two-week observation than rewrite an entire content strategy today:</p>
<ol>
<li>Before publishing, settle on one primary reader question per post.</li>
<li>Mark the one action you hope follows naturally: reply, share, profile visit, or follow.</li>
<li>Record what the platform actually exposes — impressions, replies, shares, profile visits, new follows — and leave missing data unknown.</li>
<li>Separate content types: build logs, tutorials, source analysis, and opinion pieces should not be compared against each other.</li>
<li>After two weeks, compare which posts produced deeper actions, then decide whether topic, structure, or cadence needs to change.</li>
</ol>
<p>This is not a growth guarantee. It only replaces &ldquo;I heard the algorithm likes X&rdquo; with &ldquo;here is what the public code supports, and here is whether my own data agrees.&rdquo;</p>
<h2 id="three-judgments-to-keep">Three judgments to keep</h2>
<ul>
<li>X&rsquo;s published weights describe personalized predictions, not a points table for actual engagement.</li>
<li>High-weight actions are worth understanding, but matching content to audience matters more than chasing any single number.</li>
<li>The public repository, production experiments, and your own account results are three different layers. Source code helps you form hypotheses; only real data settles them.</li>
</ul>
<p>I did not come away from this with a better posting formula. If anything, I am more certain of something simpler: write for specific people, give them something worth answering and worth passing on, then check the judgment against data. The algorithm mostly makes that process more personalized.</p>
<h2 id="primary-sources">Primary sources</h2>
<ul>
<li><a href="https://github.com/xai-org/x-algorithm/tree/b089ce64891f9c50fab73aa00dbe65acb82f198f">X For You Feed Algorithm</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/phoenix/README.md">Phoenix Recommendation System</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/params/param.rs">Home Mixer default parameters</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/scorers/ranking_scorer.rs">Ranking Scorer</a></li>
</ul>
]]></content:encoded></item><item><title>Why Moonment exists</title><link>https://moonment.net/en/notes/hello-moonment/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/en/notes/hello-moonment/</guid><description>A durable public entry point for knowledge scattered across projects, articles, and experiments.</description><content:encoded><![CDATA[<p>Tools change, platforms move, and projects end. What remains useful is why a build took a certain direction, where the evidence lives, and which boundaries were left untouched.</p>
<p>Moonment is a public entry point, not another content machine that needs constant feeding. It collects work that has already happened: open-source projects, human-reviewed notes, and experiments that can be checked again.</p>
<h2 id="three-editorial-principles">Three editorial principles</h2>
<ol>
<li><strong>Reality first.</strong> No promised outcomes and no historical data used to fill a current unknown.</li>
<li><strong>Methods public, instances isolated.</strong> Reusable methods may enter the public record; private assets and identity configuration stay behind their boundaries.</li>
<li><strong>Make it returnable.</strong> Notes should preserve sources, conditions, and the next move—not only the conclusion.</li>
</ol>
<p>The site follows the same rule: real content before more structure, clarity before scale.</p>
]]></content:encoded></item></channel></rss>