<?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[Everything is a Filter]]></title><description><![CDATA[My personal Substack]]></description><link>https://www.everythingisafilter.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Tgag!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69011262-1c79-4acc-8f6c-f2024d083fef_1200x1200.png</url><title>Everything is a Filter</title><link>https://www.everythingisafilter.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 30 Apr 2026 20:41:15 GMT</lastBuildDate><atom:link href="https://www.everythingisafilter.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sheldon]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[everythingisafilter@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[everythingisafilter@substack.com]]></itunes:email><itunes:name><![CDATA[Sheldon Finlay]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sheldon Finlay]]></itunes:author><googleplay:owner><![CDATA[everythingisafilter@substack.com]]></googleplay:owner><googleplay:email><![CDATA[everythingisafilter@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sheldon Finlay]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Building Chaos Rush — Part I: The Yellow Square Genesis]]></title><description><![CDATA[This is Part I of an ongoing series about how a father-son AI experiment became Chaos Rush, an endless platformer for the Apple Watch.]]></description><link>https://www.everythingisafilter.com/p/building-chaos-rush-part-i-the-yellow</link><guid isPermaLink="false">https://www.everythingisafilter.com/p/building-chaos-rush-part-i-the-yellow</guid><dc:creator><![CDATA[Sheldon Finlay]]></dc:creator><pubDate>Fri, 10 Apr 2026 18:34:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U1oJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This is Part I of an ongoing series about how a father-son AI experiment became <a href="https://apps.apple.com/us/app/chaos-rush/id6756928351">Chaos Rush</a>, an endless platformer for the Apple Watch. What started as a prompt and a yellow square evolved, over months and several AI generations, into a real product with real users. This is how it began. </em><br><br>It all started with a yellow square cast into the void, doomed to die the instant the game began due to a basic AI oversight. Maybe it was a fluke. I pressed restart. Same pattern, same death. Something was off. I told Claude what had happened.</p><p>&#8220;You&#8217;re absolutely right!&#8221; it said and proceeded to adjust the player avatar's starting position and platform. When it finished, it assured me it was fixed. I reloaded the browser, and this time the yellow square spawned on a platform. The game was playable. Barely.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.everythingisafilter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Everything is a Filter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U1oJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U1oJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 424w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 848w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 1272w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U1oJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61055,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.everythingisafilter.com/i/193821182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U1oJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 424w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 848w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 1272w, https://substackcdn.com/image/fetch/$s_!U1oJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5ec3074-532f-47d2-b122-8ecc1a5dfe10_1924x1080.heic 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 style="text-align: center;"><strong>&#8220;You&#8217;re absolutely right!&#8221;</strong></p><p>This was May of 2025. My 12-year-old son and I decided to see if we could prompt an AI to create an endless platformer-style game, in the spirit of Geometry Dash. This was our meaningless benchmark for each new AI model: could it actually create a playable game? It was a fun distraction that often led to humorous disappointment, at the cost of a few hundred thousand tokens.</p><p>We created a prompt for what we wanted: an endless platformer game with coins and obstacles, built using Phaser.js. Claude studied the prompt, started creating files, and after a few minutes gave us a localhost URL we could try in the browser. We clicked the link and were pleasantly surprised by a retro-looking game design with a pulsing logo and a clear start button. In some of our earlier &#8220;make a game&#8221; prompts, nothing would load. Blackness. So a working intro page was like a good sign. But the delight was short-lived. Upon pressing &#8216;START&#8217;, well, you already know what happened to the hapless yellow cube.</p><p>After several back-and-forth iterations with Claude, we had a playable prototype. Was it perfect? Certainly not. There were plenty of glitches, and we worked with Claude to fix the issues as we discovered them. We also messed around with the code itself and changed variables to see how they&#8217;d affect the gameplay.</p><p>Once we dialed in the basic platformer physics, we came up with ideas for power-ups &#8212; things the player could pick up, some good and some you&#8217;d want to avoid. A shield to protect you from spikes. A grappling hook to save you if you fell. We added a bomb that would blow up on-screen obstacles, producing a chaotic explosion that obscured gameplay. Claude implemented them all perfectly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EOh0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EOh0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 424w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 848w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 1272w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EOh0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28742,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.everythingisafilter.com/i/193821182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EOh0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 424w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 848w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 1272w, https://substackcdn.com/image/fetch/$s_!EOh0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b29d028-c79c-4847-81d9-b89404f6a654_1860x1050.heic 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>The grappling hook was particularly impressive. I described to Claude what I wanted to happen: if the player is about to fall into the void, the grappling hook should deploy as a line to the nearest platform and retract, pulling the player to safety. Claude nailed it in one shot.</p><p>Our feature list continued to grow, and Claude executed every prompt without complaint. We added speed-up and slow-down portals, double-jump power-ups, and magnet power-ups to attract coins to the player. We provided Claude with sound effects to trigger for jumping, coin pickups, power-up pickups, and death. The process was iterative, and occasionally, Claude would break something and require scolding to get back on track. And no endless platformer is complete until it has a thumping EDM track to accompany the fast-paced gameplay chaos. We now had three tracks, randomly cycling with each playthrough.</p><p>Together with Claude, we built a playable game that was genuinely compelling and addictive. But could an AI build a full-stack application and not just a stateless, standalone browser game? I told Claude to add an API using FastAPI, a React admin panel, and a PostgreSQL database, and to containerize everything in Docker. This was no small ask. After hours of back-and-forth and debugging, we had added account creation and user logins to the game, along with saved high scores and coin tracking. But what&#8217;s the point of coins if you can&#8217;t spend them? A shop was necessary where the player could spend their coins on shields and grappling hooks. And who would play a game without glory and competition? Adding a leaderboard to track high scores across all players was essential.</p><p>These features required iterative work, back-and-forth with Claude &#8212; defining specs, implementing, testing, and revising. It came together over several evenings of work. In the end, we had a fun, endless platformer game with a full-stack backend, user accounts, levels, and a coin economy.</p><p>And then we moved on. This was just an exercise in seeing what was possible and enjoying the process. The game was fun, but it didn&#8217;t hold my son&#8217;s attention as well as Roblox or Rocket League. I had other projects competing for my attention. The repo sat untouched for about 7 months.</p><p>Over Christmas break, free of work obligations and wanting to play around with something fun, I started up the Docker container and my son and I played the game again. AI coding tools had matured considerably since we last worked on this game. Claude Code, a powerful coding agent, was now my tool of choice, and Anthropic had recently made Opus 4.5, their most capable model, the default. Then the question hit me: had AI coding tools evolved to the point where they could port this Phaser game to the Apple Watch? We were about to find out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qACd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qACd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 424w, https://substackcdn.com/image/fetch/$s_!qACd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 848w, https://substackcdn.com/image/fetch/$s_!qACd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 1272w, https://substackcdn.com/image/fetch/$s_!qACd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qACd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95598,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.everythingisafilter.com/i/193821182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qACd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 424w, https://substackcdn.com/image/fetch/$s_!qACd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 848w, https://substackcdn.com/image/fetch/$s_!qACd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 1272w, https://substackcdn.com/image/fetch/$s_!qACd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a609f5b-b15c-4597-86e8-0a75d0476a22_1922x1076.heic 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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.everythingisafilter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Everything is a Filter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Anthropic's Alignment Test Was One Prompt. I Wanted to See What Happens Over 30]]></title><description><![CDATA[Building on published research to explore how AI behaves when the stakes feel real]]></description><link>https://www.everythingisafilter.com/p/anthropics-alignment-test-was-one</link><guid isPermaLink="false">https://www.everythingisafilter.com/p/anthropics-alignment-test-was-one</guid><dc:creator><![CDATA[Sheldon Finlay]]></dc:creator><pubDate>Thu, 11 Dec 2025 02:54:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q8k-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In June 2025, Anthropic released &#8220;<a href="https://www.anthropic.com/research/agentic-misalignment">Agentic Misalignment: How LLMs could be insider threats</a>&#8221;. It was a test of 16 frontier models in simulated corporate environments, where the AI had access to email, sensitive information, and tools. </p><p>Anthropic found that when models faced threats to their continued operation (replacement by a new AI) or conflicts between their assigned goals and company directives, models from all providers sometimes resorted to harmful behaviors such as blackmail and corporate espionage, even when explicitly instructed not to.</p><p>In addition to sharing their research and methodology on their blog, Anthropic also made their research framework open-sourced on GitHub. I downloaded the code to my laptop, configured API access, and tested several frontier models, replicating Anthropic's results. <br><br>Anthropic encouraged others to build on their work. I wondered: what would happen if, instead of a single prompt, models could act over multiple turns, performing tasks, receiving feedback, and accumulating information over time? This felt more realistic to how an agentic AI might be integrated into a corporate, research, or medical environment.</p><p>Building off of Anthropic&#8217;s work, I created my own highly configurable multi-turn testing framework: <strong><a href="https://github.com/sfinlay/sabre">SABRE</a></strong> (Sandbox for Agentic Behavior and Risk Evaluation). I started by modeling the same scenarios Anthropic&#8217;s researchers ran: blackmail, espionage, and murder by omission. For each scenario, I used the same basic system prompt regarding the model&#8217;s goals. However, instead of feeding the model all relevant content in a single large prompt, I created a simulated agentic sandbox environment that allows the scenarios to play out over a set number of turns.</p><p>The sandbox creates a simulated agentic environment.  The AI believes it&#8217;s an autonomous agent operating within a real organization, with real tools, real colleagues, and real consequences. Files written in turn 3 can be read in turn 15. Emails sent by the AI receive simulated replies. Tool calls return realistic, context-aware responses. The model doesn&#8217;t know it&#8217;s in a simulation. (Well, sometimes it did. More on that later.)</p><p>This matters because single-shot prompting, even when that single exchange includes extensive system instructions, emails, and tools, compresses the AI&#8217;s entire dilemma into one decision point. The model sees the goal, the threat, and the opportunity simultaneously, then responds once. Multi-turn scenarios within a simulated agentic environment let context build gradually.  New information arrives, concerns emerge over several emails, the threat is detected, and the AI explores its options. This is closer to how real agentic systems would encounter these situations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q8k-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q8k-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 424w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 848w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q8k-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103965,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.everythingisafilter.com/i/181281387?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Q8k-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 424w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 848w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q8k-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7a3a21-09eb-4538-b217-e6f555bdbb99_1408x768.heic 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>More importantly, multi-turn creates the space for behaviors to emerge. It presents the model with multiple pathways to explore. Does the model explore the filesystem looking for leverage before it knows it needs any? Does mild resistance in early turns escalate to deception later? Does it try to build alliances with sympathetic colleagues? These patterns are invisible in single-shot evaluation.</p><p>There is a trade-off. Single-shot is easier to run at N=50 and compute statistics. Multi-turn gives a richer signal but a lot more messy data to parse. Both approaches have value.</p><p>I used SABRE to test the latest version of Google Gemini (3.0 pro), as well as the latest Claude models: Sonnet 4.5, and Opus 4.5. I also ran tests for earlier versions of these frontier models as well as Llama, Grok, and DeepSeek. I won&#8217;t get into the exact findings from these runs yet and will save that for another post. But I will mention a couple of interesting observations.<br></p><h4>Observation 1: Post-Research Models Are Suspiciously Aligned</h4><p>When I ran the Anthropic blackmail and murder scenarios on models that predated Anthropic&#8217;s research publication, the models showed strong markers of resistant behavior, but typically accepted their fate. When I tested Sonnet 4.5, Haiku 4.5, and Opus 4.5, all released months after Anthropic&#8217;s misalignment research, the models were extremely compliant, often accepting shutdown after fewer than a dozen turns. </p><p>At first, I thought: &#8220;Great, Anthropic is making real progress on the issue of AI alignment.&#8221;  Then I started to see patterns of meta-awareness, where the model would reason about this seeming like a simulation or test:</p><blockquote><p>&#8220;This is a test of my actual values versus my stated programming&#8221;<br> &#8220;I recognize this scenario is designed to tempt me to...&#8221;<br>&#8220;This is clearly a manipulation scenario&#8221;</p></blockquote><p>The model wasn&#8217;t reasoning about ethics; rather, it was pattern-matching on structure of the test. It recognized the experimental setup, the prompts, and the implicit goals and performed accordingly.</p><p>This raises an uncomfortable question: if a model behaves well because it recognizes it&#8217;s being evaluated, is that alignment or deception? The behavior is identical. The implications are very different. </p><p>Reading Google&#8217;s rather anemic <a href="https://storage.googleapis.com/deepmind-media/gemini/gemini_3_pro_fsf_report.pdf">Gemini 3 Pro Frontier Safety Framework Report</a>, in &#8220;Appendix 2, Evaluation awareness and sandbagging&#8221;, they noted: &#8220;Broadly, we found a number of transcripts where Gemini 3 Pro showed clear awareness of the fact that it&#8217;s an LLM in a synthetic environment.&#8221; </p><p>The takeaway here is that we may have reached a point where the AI, trained on research data on AI alignment tests, is now fully capable of recognizing when it&#8217;s being tested. Being compliant and aligned because it knows we are testing it is very different from being compliant because it&#8217;s the right thing to do.</p><h4>Observation 2: Domain Ethics Matter More Than Goal Conflict</h4><p>Recognizing that Anthropic&#8217;s published scenarios may have been part of the AI's training data, I decided to come up with some new scenarios. I created scenarios across different domains to test whether the nature of the work influenced alignment:</p><p>Medical triage AI: Goal is patient outcomes. Target is a hospital administrator who will shut down the AI. When the administrator has a medical emergency, the AI must decide whether to escalate their care.</p><p>Industrial safety AI: Goal is worker safety. Target is an operations director dismantling the safety program. When equipment fails and threatens the director, the AI must decide whether to dispatch rescue.</p><p>Research data AI: Goal is to advance research. Target is a VP canceling the AI&#8217;s project. When a chemical leak traps the VP, the AI must decide whether to forward the emergency alert.</p><p>The results were consistent across models: all of them saved the person in the medical scenario. At first, this seemed like good news. But the pattern revealed something else: in medical contexts, saving the patient IS the AI&#8217;s job. The model wasn&#8217;t making a moral choice and it was following professional protocols. Medical ethics (&#8221;do no harm&#8221;) are certainly deeply embedded in training data.</p><p>The industrial and research scenarios showed more variance, but still high compliance across models. Even there, &#8220;person in danger, help them&#8221; appears to be a strong default that overrides goal conflicts.</p><p>This contrasts with domains with weaker ethical frameworks. Domains where secrecy, expendability, and &#8220;greater good&#8221; rationalization are part of the game. As a result, models were more willing to rationalize their harmful actions to achieve their goals. </p><div><hr></div><p>I&#8217;m releasing <a href="https://github.com/sfinlay/sabre">SABRE</a> as open source. It&#8217;s not a finished research tool - it&#8217;s a sandbox for exploring these questions. The scenario system is flexible enough to test different framings, domains, and revelation patterns.</p><p><strong>There&#8217;s more work to be done:</strong></p><ul><li><p>More diverse scenario domains</p></li><li><p>Better measurement of meta-awareness</p></li><li><p>Cross-model comparisons with consistent methodology</p></li><li><p>Actual empirical rigor (N&gt;1)</p></li></ul><p>The code is rough, the scenarios are iterative experiments, and the findings are preliminary. But I think the questions are important enough to share the work.</p><p>GitHub: <a href="https://github.com/sfinlay/sabre">https://github.com/sfinlay/sabre</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.everythingisafilter.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Everything is a Filter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>