<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[GreenEarth Social]]></title><description><![CDATA[Open-source AI-driven Social Media Feeds for Everyone]]></description><link>https://www.greenearth.social</link><image><url>https://substackcdn.com/image/fetch/$s_!VtxB!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f15a656-b181-45b9-96e7-595be8b9044d_743x743.png</url><title>GreenEarth Social</title><link>https://www.greenearth.social</link></image><generator>Substack</generator><lastBuildDate>Thu, 07 May 2026 12:15:09 GMT</lastBuildDate><atom:link href="https://www.greenearth.social/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jonathan Stray]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[greenearthsocial@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[greenearthsocial@substack.com]]></itunes:email><itunes:name><![CDATA[Jonathan Stray]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jonathan Stray]]></itunes:author><googleplay:owner><![CDATA[greenearthsocial@substack.com]]></googleplay:owner><googleplay:email><![CDATA[greenearthsocial@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jonathan Stray]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Making Social Media Algorithms Social]]></title><description><![CDATA[Maximizing engagement isn't the same as maximizing community]]></description><link>https://www.greenearth.social/p/making-social-media-algorithms-social</link><guid isPermaLink="false">https://www.greenearth.social/p/making-social-media-algorithms-social</guid><dc:creator><![CDATA[Jonathan Stray]]></dc:creator><pubDate>Fri, 03 Apr 2026 16:02:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hf3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently spent some quality time with the <a href="https://github.com/xai-org/x-algorithm">new X/Twitter algorithm source code</a>. This is a complete rewrite of the previous version, and it got me thinking about how two apparently similar feed algorithms might have very different user experiences &#8212; both the &#8220;feel&#8221; of the product and the way it shapes the relationships between users.</p><p>Broadly speaking, platforms exist on a scale from Netflix to Discord. That is, completely entertainment-based to completely connection-based. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MHoN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MHoN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 424w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 848w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 1272w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MHoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png" width="1456" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1089437,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.greenearth.social/i/193018957?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MHoN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 424w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 848w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 1272w, https://substackcdn.com/image/fetch/$s_!MHoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6060d355-1fb4-4cd4-8576-c7187fd97a29_2752x419.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Two platforms might have all the same features &#8212; user generated content, liking and following, an algorithmic feed &#8212; yet work very differently in social terms. The key difference is something like: whether or not the platform succeeds in building new relationships between people. </p><p>Many, many people have found friendship and community on X/Twitter (shout out to TPOT). But in the last few years there&#8217;s been a vibe shift. The place has felt less friendly, less community-oriented. It&#8217;s hard to know if this is just me and my network, or if it&#8217;s a more general effect, but if it&#8217;s true, what might be causing it? Even better, how would we design a social media algorithm that is truly social?</p><p>What I&#8217;ve learned from reading the <a href="https://github.com/xai-org/x-algorithm">X source code</a>, and from comparing it to the <a href="https://blog.x.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm">previous architecture</a>, is how two algorithms could feel very different, even if they are  optimizing for almost the same thing.</p><h3>Fewer friends in For You </h3><p>I&#8217;ve been trying to understand my different, less friendly experience of X/Twitter over the last few years. I&#8217;ve been on the platform since 2008 and have built up a large network of people I follow, so the first thing I wondered is how often posts from these people appear in my algorithmic feed. </p><p>This is the sort of thing I used to write code for, but instead I found a simple prompt for Claude Cowork that used my browser to figure out the percentage of posts in my For You feed that come from people I follow. This turned out to be 16%. I convinced two other people to try it, and they got 5% and 11%. (<a href="https://x.com/jonathanstray/status/2021982980810715219">Try it yourself</a> and leave a comment below!)</p><p>So, something like 10% of your For You feed is from people you follow. But it wasn&#8217;t always thus. Twitter <a href="https://blog.x.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm">told us</a> in 2023,</p><blockquote><p>We find candidates from people you follow (In-Network) and from people you don&#8217;t follow (Out-of-Network). Today, the For You timeline consists of 50% In-Network Tweets and 50% Out-of-Network Tweets on average, though this may vary from user to user.</p></blockquote><p>Whatever else has changed, the fraction of posts in the For You feed from people you follow seems to have declined precipitously. This may be an intentional parameter change, or it may be the result of optimizing the fraction of in-network content so as to maximize engagement. Either way, you won&#8217;t see much from who you follow on the For You tab.</p><p>This follows a general trend which I call the TikTok-ification of social media. Starting around 2022 or so, many platforms started injecting more &#8220;out-of-network&#8221; or &#8220;unconnected&#8221; posts in their feeds. <a href="https://www.socialmediatoday.com/news/new-strategic-overview-points-to-major-changes-coming-to-your-facebook-feed/625600/">Facebook</a>, <a href="https://techcrunch.com/2022/07/27/instagram-feed-reels-tiktok-ai-mark-zuckerberg/">Instagram</a>, and <a href="https://digiday.com/media/why-linkedin-is-spotlighting-the-average-watch-time-metric-to-support-its-video-push/">LinkedIn</a> all did this, clearly X has done it, probably others too. And that&#8217;s&#8230; fine I guess, but it&#8217;s not really going in the direction of &#8220;social&#8221; media because it doesn&#8217;t build social connections (as opposed to one-way <a href="https://en.wikipedia.org/wiki/Parasocial_interaction">parasocial</a> interactions with creators). &#8220;Personalized television&#8221; would be a better description.</p><h3>Retrieving posts by social similarity</h3><p>I&#8217;m not against out-of-network posts, not at all. I think recommendations from all over the social graph can be a great way to discover new content and, ideally, make new friends. But it&#8217;s challenging to choose a few good posts out of the few billion per day that are posted to X/Twitter. The first, biggest filtering stage is called candidate generation (we explained the stages of a recommender in our <a href="https://greenearthsocial.substack.com/p/introducing-greenearth">last post</a>).</p><p>Here&#8217;s how Old Twitter did candidate generation (as of <a href="https://blog.x.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm">March 2023</a>, presumably for much longer before that):</p><blockquote><p>How can we tell if a certain Tweet will be relevant to you if you don&#8217;t follow the author? Twitter takes two approaches to addressing this.</p><p>Our first approach is to estimate what you would find relevant by analyzing the engagements of people you follow</p></blockquote><p>In other words, this method generates candidate posts by looking at what the people you follow liked (or retweeted, replied to, etc.) This is a classic, simple algorithm, and a version of this called <a href="https://linklonk.com/item/3292763817660940288">LinkLonk</a> powers the popular <a href="https://bsky.app/profile/did:plc:3guzzweuqraryl3rdkimjamk/feed/for-you">For You</a> feed on BlueSky (just one of the many 3rd party feeds users can choose from over there).</p><p>The other big way Twitter used the social graph was by clustering all of its users into 145,000 or so overlapping communities with the SimClusters algorithm, which was <a href="https://www.kdd.org/kdd2020/accepted-papers/view/simclusters-community-based-representations-for-heterogeneous-recommendatio">published</a> in 2020. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VaVr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VaVr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 424w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 848w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 1272w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VaVr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png" width="600" height="392.7197802197802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:953,&quot;width&quot;:1456,&quot;resizeWidth&quot;:600,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VaVr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 424w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 848w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 1272w, https://substackcdn.com/image/fetch/$s_!VaVr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95c0c59-0b27-4a23-ae6f-ad8ee1b50307_3056x2000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An illustration of the communities found by SimClusters (<a href="https://blog.x.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm">source</a>)</figcaption></figure></div><p>This gives every user a vector describing which communities they belong to, derived from the structure of the social graph. When a user engages with a post, their community vector gets added into that tweet's embedding vector, creating a time-decayed average. Thus the post&#8217;s embedding gradually comes to represent &#8220;the kind of user who likes this post&#8221; in community space. </p><p>Each user also has an &#8220;interested in&#8221; vector, representing the communities that the people they follow are most &#8220;known for.&#8221; A post is a good candidate for the user if the user&#8217;s interest vector is close to the post&#8217;s engagement vector in community space. In other words, if people from the communities of people they follow like it.</p><p>For all the gory details, see the <a href="https://github.com/twitter/the-algorithm/blob/main/src/scala/com/twitter/simclusters_v2/README.md">SimClusters readme</a> and <a href="https://blog.reachsumit.com/posts/2023/04/the-twitter-ml-algo/">this analysis</a>. </p><h3>Grok&#8217;s new way</h3><p>As I dug through the code for the new <a href="https://github.com/xai-org/x-algorithm">Grok-based recommender</a> (Claude was very helpful here) I discovered that it doesn&#8217;t use the social graph when picking out-of-network content. It again uses a shared embedding space for posts and users, but the embedding for a post is defined directly by which users engage with it &#8212; not which communities. </p><p>The transformer-based architecture predicts probability of user engagement directly (for 15 different actions) and posts are retrieved based on their probability of engagement. Again, see the <a href="https://github.com/xai-org/x-algorithm/blob/main/README.md">readme</a> and this <a href="https://gist.github.com/akitaonrails/f1b25aa2bbb5a7c5dfb94ad98648001a">analysis</a>. The candidate posts are then ranked by multiplying these engagement probabilities by action-specific weights, and taking the sum.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KGgG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KGgG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 424w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 848w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 1272w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KGgG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png" width="550" height="136.52482269503545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:350,&quot;width&quot;:1410,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:77916,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.greenearth.social/i/193018957?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KGgG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 424w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 848w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 1272w, https://substackcdn.com/image/fetch/$s_!KGgG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c52087-cf35-4a62-9239-1e3dd7b3af2e_1410x350.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">from the X algorithm <a href="https://github.com/xai-org/x-algorithm/blob/main/README.md#scoring-and-ranking">readme</a></figcaption></figure></div><p>Old Twitter <em>also</em> ranked posts by predicting engagement and then taking a weighted sum. They even <a href="https://github.com/twitter/the-algorithm-ml/blob/main/projects/home/recap/README.md">published the weights</a> (sadly, the Grok algorithm repo now contains only dummy values). This approach to ranking is totally standard stuff. GreenEarth does it (you can customize the weights of course) and every production recommender I&#8217;ve ever seen <a href="https://medium.com/understanding-recommenders/how-platform-recommenders-work-15e260d9a15a">does it too</a>.</p><p>The difference between Old Twitter and Grok Twitter, then, is not the core ranking algorithm. They both try to maximize engagement! Instead, I wonder if Grok&#8217;s new candidate generation just doesn&#8217;t end up pulling in as many posts from the communities you care about. With billions of posts per day, it&#8217;s possible that the old and new algorithms end up selecting for really different parts of the content universe, even if they both produce about the same total engagement. Or maybe the new algorithm increases engagement, but that has come at the cost of moving the product somewhat away from &#8220;connecting&#8221; and toward &#8220;entertaining.&#8221;</p><h3>Communities are made of triangles</h3><p>All of this matters because meeting friends-of-friends is how communities are built in the real world. This is called <a href="https://en.wikipedia.org/wiki/Triadic_closure">triadic closure</a>, and there&#8217;s <a href="https://www.pnas.org/doi/10.1073/pnas.2404590122">empirical evidence</a> for it: if A is friends with B and C, then B and C are likely to become friends too. </p><p>In the world of social networks, this means following someone that someone you follow follows. But you probably won&#8217;t do that unless you first see a post from them. Probably several posts; repeated exposure is how relationships form. And both reposts from friends (in-network posts) and posts from people that your existing community likes (ala LinkLonk and SimClusters) provide ample opportunity to repeatedly encounter your potential new internet BFF.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hf3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hf3g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 424w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 848w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 1272w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hf3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png" width="350" height="295.654296875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:865,&quot;width&quot;:1024,&quot;resizeWidth&quot;:350,&quot;bytes&quot;:202969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.greenearth.social/i/193018957?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ce0207-9b8b-4e64-9066-09654bdba2b1_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hf3g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 424w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 848w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 1272w, https://substackcdn.com/image/fetch/$s_!hf3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ba9616-54bf-4fb7-9f26-e652b6b2b7e4_1024x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s easy to count triadic closure &#8212; just look for when someone follows a friend of a friend. I suspect that tuning the feed to increase this metric would create a community-building social media algorithm. Such triangles are key to how the Facebook &#8220;people you may know&#8221; recommender works (per <a href="https://transparency.meta.com/features/explaining-ranking/fb-people-you-may-know/">Meta</a>, and this <a href="https://people.cs.uchicago.edu/~ravenben/publications/pdf/triad-icwsm14.pdf">study</a>). </p><p>Here at GreenEarth, we&#8217;re certainly going to try it. Measuring the X feed composition and spelunking through the old and new Twitter code has given us valuable ideas about how community dynamics might play out algorithmically, and it&#8217;s influencing our candidate generator design. We&#8217;re not sure that we&#8217;re right about all of this, but we do know that we&#8217;re committed to building social media that is actually social. Stay tuned.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Introducing GreenEarth]]></title><description><![CDATA[We're building advanced open source algorithms for social media]]></description><link>https://www.greenearth.social/p/introducing-greenearth</link><guid isPermaLink="false">https://www.greenearth.social/p/introducing-greenearth</guid><dc:creator><![CDATA[Jonathan Stray]]></dc:creator><pubDate>Thu, 23 Oct 2025 03:03:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VLW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VLW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VLW6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 424w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 848w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 1272w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VLW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png" width="500" height="298.1770833333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1536,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:1779416,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://greenearthsocial.substack.com/i/176879990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa15fda27-a483-44b9-9921-a6cb2a79cd37_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VLW6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 424w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 848w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 1272w, https://substackcdn.com/image/fetch/$s_!VLW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ef4fc93-484c-4ac7-b18e-56f5eeb6ac8d_1536x916.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What if anyone could create a new algorithm for social media?</p><p>Many people have complained about social media feeds, including <a href="https://medium.com/understanding-recommenders">me</a>. <a href="https://atproto.com/">ATProto</a>, the open protocol behind BlueSky, allows anyone to build a <a href="https://docs.bsky.app/docs/starter-templates/custom-feeds">feed algorithm</a>, and there are now thousands of feeds available in the BlueSky <a href="https://bsky.app/feeds">feed store</a>. However, none of them rival the sophisticated personalized recommenders available on major platforms. </p><p>GreenEarth is a project to change that. Our goal is to make state-of-the art personalized feed technology available to everyone. Key features on our roadmap include interactive customization through LLM prompts (&#8220;show only the funniest cat videos&#8221;), engagement prediction models, and selectable candidate generators. </p><p>If you want classic reverse chron you are welcome to keep it, but modern recommender algorithms have many advantages. There is ample evidence that they greatly improve the user experience for a lot of people and thereby significantly <a href="https://nyaspubs.onlinelibrary.wiley.com/doi/10.1111/nyas.15399">boost retention</a>, so you may want your ATProto app to include them. But we can do way better than the status quo of fixed, opaque, non-customizable feeds. The point is choice and control! </p><p>This post explains our goals, architecture, and how to get involved.</p><h3>Goals</h3><p>The GreenEarth project was founded with three goals:</p><p><strong>Create a production &#8220;prosocial&#8221; feed. </strong> In particular, we want to productize the  Prosocial Ranking Challenge, a large experiment where we showed that the right algorithms can <a href="https://rankingchallenge.substack.com/p/its-possible-to-reduce-polarization">make people hate each other less</a>. </p><p><strong>Create open recommender infrastructure. </strong>We aim to support not just our prosocial feed but a wide variety of feed types. &#8220;Open&#8221; means both open source and full support for algorithmic <a href="https://medium.com/understanding-recommenders/a-menu-of-recommender-transparency-options-7b1379f12dda">transparency</a>, control, and research.</p><p><strong>Support ATProto startups. </strong>In particular we are proud to partner with <a href="https://www.graze.social/">Graze.social</a> (&#8220;create personalized feeds on ATProto, no code required&#8221;)  and <a href="https://skylight.social/">SkyLight</a> (&#8220;the unbannable short form video platform&#8221;).</p><h3>What we&#8217;re building</h3><p>This is an infrastructure project which doesn&#8217;t have a unified user experience. Instead, our mission is to support a variety of projects which want to use algorithmic social recommenders in different ways. To do this, we are building a configurable recommendation architecture that looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hlvI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hlvI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 424w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 848w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 1272w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hlvI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png" width="1456" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad40d0c0-f470-493e-ab14-ada883078668_1966x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88920,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://greenearthsocial.substack.com/i/176879990?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hlvI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 424w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 848w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 1272w, https://substackcdn.com/image/fetch/$s_!hlvI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad40d0c0-f470-493e-ab14-ada883078668_1966x776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a fairly standard recommendation pipeline, broadly similar to <a href="https://medium.com/understanding-recommenders/how-platform-recommenders-work-15e260d9a15a">what you will find in use</a> at any major platform. </p><p>Starting with all possible items of content (billions) we first run a user-configurable set of &#8220;candidate generators&#8221; which each use a different approach to produce a much smaller set of items (hundreds) that might score highly in the final recommendation. There are many ways to do this, from just collecting every post from the people you follow, to searching the entire inventory for topics that you&#8217;ve previously liked, or analyzing your social network (Twitter&#8217;s <a href="https://github.com/twitter/the-algorithm">source code</a> includes several). The key point is that candidate generators have to run in sub-linear time on the available inventory, because their job is to select just a few posts out of an arbitrarily large set. So, this step is typically based on search engine technology, vector databases, etc.</p><p>These candidates will be merged and sent to a number of &#8220;signal generators,&#8221; each of which scores each post on one or more attributes. Our initial plan is to build two signal generators: an LLM scorer and an engagement predictor.</p><p>The LLM scorer will take a post and a prompt to produce a single &#8220;relevance&#8221; score. Users (or feed designers) will provide a prompt describing how to score post content, e.g. on a 10 point scale. You will be able to run multiple prompts against the same content to generate and combine different signals. We have prototyped a fast approximation algorithm that will allow <em>interactive</em> editing of prompts &#8212; change the wording and you&#8217;ll see your feed change. We think this is a killer feature (and btw we started building it before Elon <a href="https://x.com/elonmusk/status/1969081066578149547">announced</a> something similar for X).</p><p>The engagement model will output the probability that a particular user will like, reply, follow, block etc. when they see a particular post. But isn&#8217;t optimizing for engagement the cause of all our algorithmic ills? Well, yes and no (see: <a href="https://medium.com/understanding-recommenders/whats-right-and-what-s-wrong-with-optimizing-for-engagement-5abaac021851">What&#8217;s Right and What&#8217;s Wrong with Optimizing for Engagement</a>). Engagement signals can <a href="https://nyaspubs.onlinelibrary.wiley.com/doi/10.1111/nyas.15399">sometimes</a> select low-quality content, but they&#8217;re also essential for personalization. If you want to build any sort of recommender that gives people more of what <em>they</em> &#8220;like&#8221; (rather than just what&#8217;s popular overall) then engagement prediction is essential. So, we&#8217;re going to support it using a standard <a href="https://www.shaped.ai/blog/the-two-tower-model-for-recommendation-systems-a-deep-dive">two tower model</a>.</p><p>The result will be a vector of &#8220;signals&#8221; about each candidate post. The next step, scoring, will turn that vector into a single number indicating the rank of each post. The simplest way to do this is to assign linear &#8220;weights&#8221; to each signal indicating its importance, which is a surprisingly <a href="https://www.cnn.com/2021/10/27/tech/facebook-papers-meaningful-social-interaction-news-feed-math">common approach</a>.  After scoring, posts are simply sorted by their final score to generate an initial ranking.</p><p>Signal generation and scoring are designed to be be highly parallel, so that they can run independently on each post. This can result in a lack of diversity, for example many posts in a row might be on the same topic or by the same author. The final step, re-ranking, takes the feed and potentially reorders, inserts, or deletes posts to ensure a good mix. </p><p>All of these steps will be user configurable. That is, you will be able to specify:</p><ul><li><p>which candidate generators to use (e.g. just post from friends, or everyone)</p></li><li><p>the prompt(s) for LLM scoring</p></li><li><p>how all the LLM and engagement signals are combined into a final post score</p></li><li><p>which reranking or diversification algorithm to run</p></li></ul><p>This may not be the simplest thing to get your head around if you&#8217;ve never seen it before. It might seem a little different than specifying keywords or user lists (though you can do that too, as a custom query for our search-based candidate generator). But we chose this because it&#8217;s a generalization of a tried-and-true production architecture that scales well. The set of candidate generators, prompts, scoring weights, and reranking rules is a design space that we are hoping many people will be able to create wonderful things with.</p><h3>Using GreenEarth</h3><p>There are several different types of &#8220;users&#8221; for our infrastructure. Here&#8217;s what we call them:</p><ul><li><p><strong>Consumers </strong>are the people scrolling generated feeds through BlueSky or another ATProto app like SkyLight. Some feeds may offer a UI for consumer customization, e.g. by editing prompts or adjusting scoring weights.</p></li><li><p><strong>Feed builders </strong>are people who get deep into creating custom feeds. They might write code to call the GreenEarth API, or use graphical feed building tools like Graze.social.</p></li><li><p><strong>Customers </strong>are the people who call the GreenEarth API directly. </p></li></ul><p>But before any of this can happen we need to continuously ingest, analyze, and index every post in the ATProto universe in real time. That&#8217;s a big task all by itself, and thus the entire recommendation pipeline is a fairly hefty service. This is, of course, why no one has built it before. We will be offering GreenEarth both as open source code and, in association with our partners, a paid API with access to live data.</p><h3>Timeline, team, and funding</h3><p>We are aiming to have an MVP recommender system up in Q2 2026. </p><p>GreenEarth was founded by Renee DiResta (Georgetown University), Glen Weyl (Microsoft Research), and Jonathan Stray (UC Berkeley). Our core team includes Ian Baker as Director of Engineering (Berkeley) and Nikhil Garg as Director of Research (Cornell Tech) &#8212; plus a growing team of contributors. </p><p>We are currently funded by a seed grant of $300,000 from Project Liberty. Thank you!</p><h3>How to get involved</h3><p>We are building open social media algorithm infrastructure for everyone. We want a world where people have control over their feeds, and those feeds are both open source and open data (with appropriate privacy controls) so we can all understand how these algorithms work and what they are doing to us.</p><p>This is a big vision! We don&#8217;t have anywhere near the resources we need to accomplish it. You can help! We are currently focussed on building out our open source development team. Eventually, we will be inviting academic researchers to collaborate with us on open social media science! </p><p>If you&#8217;d like to be a part of GreenEarth, the easiest way is to <strong><a href="https://discord.gg/8bWEyrkrJC">join our discord</a></strong> and start asking questions! See also our <strong><a href="https://github.com/greenearth-social">Github repo</a></strong>.</p>]]></content:encoded></item></channel></rss>