<?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[Switching Context]]></title><description><![CDATA[Engineer and product manager writing about AI, embedded systems, and what I’m building.]]></description><link>https://www.switchingcontext.com</link><image><url>https://substackcdn.com/image/fetch/$s_!eK0m!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg</url><title>Switching Context</title><link>https://www.switchingcontext.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 14:28:16 GMT</lastBuildDate><atom:link href="https://www.switchingcontext.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Parker Dorris]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[parkerdorris725439@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[parkerdorris725439@substack.com]]></itunes:email><itunes:name><![CDATA[Parker Dorris]]></itunes:name></itunes:owner><itunes:author><![CDATA[Parker Dorris]]></itunes:author><googleplay:owner><![CDATA[parkerdorris725439@substack.com]]></googleplay:owner><googleplay:email><![CDATA[parkerdorris725439@substack.com]]></googleplay:email><googleplay:author><![CDATA[Parker Dorris]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Keeping creativity on rails]]></title><description><![CDATA[Experiments balancing creativity and deterministic code generation]]></description><link>https://www.switchingcontext.com/p/keeping-creativity-on-rails</link><guid isPermaLink="false">https://www.switchingcontext.com/p/keeping-creativity-on-rails</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Mon, 17 Nov 2025 03:32:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v_Dv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><p>In my <a href="https://www.switchingcontext.com/p/alignment-vs-creativity-in-generative">last post</a>, I explored deterministic code generation using AI. In these early days of AI-assisted development, organizations face two risks:</p><ol><li><p>stifling AI creativity in the fight against hallucinations, or</p></li><li><p>falling prey to &#8220;vibe coding&#8221;&#8212;essentially hoping a roomful of infinite monkeys will eventually produce perfect code.</p></li></ol><p>Striking a &#8220;creativity on rails&#8221; balance requires understanding how changes to a code-generating LLM&#8217;s inputs control different aspects of its output.</p><p>In this follow-up, I&#8217;ll walk through experiments I ran to see how prompt and context specificity affect deterministic code generation.</p><p>Up front: these are simple tests exploring a spectrum of specificity typically used for proofs of concept and MVPs, not production projects. See my &#8220;Next steps&#8221; section at the end for additional tests that address challenges specific to larger, production-quality codebases.</p><h2>What we&#8217;re building</h2><p>For each test build in this experiment, the goal was the same: build a simple note-taking app. I chose this because:</p><ul><li><p>I wanted a multi-component, single-page tool. At their simplest, note-taking apps have a list of notes and a text box for entry, all on one page.</p></li><li><p>There&#8217;s variety in how note-taking apps can be laid out visually (as seen in the market today), so I hoped we&#8217;d see UI variety increase as prompt specificity decreased. Spoiler alert: this assumption turned out to be true.</p></li><li><p>Diversity in UI component look and feel would likely translate to at least superficial differences in the underlying codebase, which could be examined.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v_Dv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v_Dv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v_Dv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:194106,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.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_!v_Dv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!v_Dv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F108eaa49-7142-443a-a7df-016e7401b91d_1024x1024.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><h2>Complexity divided into tiers</h2><p>To test how prompt and context specificity affect code generation, I created 5 tiers, each one more specific than the last.</p><ul><li><p>Tier 0: Intent only&#8212;an intentionally vague prompt. Pure vibe coding.</p></li><li><p>Tier 1: Requirements&#8212;more specific functional requirements, but other decisions explicitly left to the LLM. This is where I start specifying basics like &#8220;use React and TypeScript.&#8221;</p></li><li><p>Tier 2: Requirements + architecture guidance&#8212;tighter functional requirements, including data model and data flow.</p></li><li><p>Tier 3: Requirements + architecture + technical specs&#8212;locking down data structures and file names.</p></li><li><p>Tier 4: Full single-file PRD with all files, functions, and states explicitly defined.</p></li></ul><p>At each tier, I used Codex to generate a note-taking app twice. My expectation was that I would see fewer differences per generation as I went up successive tiers.</p><h2>A note about these prompts</h2><p>I used LLMs to generate the prompts and PRDs for each tier, just as I&#8217;ve done for other projects on this blog. I chose this approach because meta prompting&#8212;prompting to generate prompts&#8212;has become a well-established technique in AI-assisted software development. Generating these prompts with LLM support helped ensure that specificity increased systematically from tier to tier.</p><p>That said, if I ran this experiment again, I&#8217;d remove the explicit lists of features that the LLM is free to customize. Prompting &#8220;it&#8217;s okay to be creative here&#8221; probably yields a different result than simply leaving those features out entirely.</p><p>All prompt input, two generative outputs per tier, and an LLM-based comparison of outputs at each tier is available here:</p><p><a href="https://github.com/parkerdorris/DeterministicCodeExperiments">Deterministic code experiments repo</a></p><h2>Helper script to do project comparison</h2><p>As mentioned, I wanted the LLM to review the code output because I assumed it would catch differences I might miss. The script that runs the LLM-based comparison of two projects is included in the GitHub repo.</p><p>I also included the prompt to generate the script. Looking back, I should have made that prompt more specific. The LLM&#8217;s comparative output varies widely in detail across the tier directories&#8212;a direct result of the script generation prompt being too loose.</p><p>This touches on another subject I&#8217;m exploring in a project I hope to write about next month. These initial determinism vs. creativity experiments appeal to me because I&#8217;m building apps that perform tasks with a backend LLM. Optimizing LLM output for those tasks often comes down to tuning the balance between determinism and creativity.</p><p>But for now, onto the test results.</p><h2>Tier 0</h2><p>The prompt for this tier was so short that I can include it here:</p><pre><code><code>Build a simple note&#8209;taking app using React.

The app should allow users to create and view notes.

Do whatever you think is best for the project structure, UI, and state management.
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5OFl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5OFl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 424w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 848w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 1272w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5OFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic" width="1368" height="1112" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34754,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.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_!5OFl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 424w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 848w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.heic 1272w, https://substackcdn.com/image/fetch/$s_!5OFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de9862d-e591-44a2-8d70-282ff349d94b_1368x1112.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jBhf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jBhf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 424w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 848w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 1272w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jBhf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic" width="1456" height="895" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:895,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52734,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.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_!jBhf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 424w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 848w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.heic 1272w, https://substackcdn.com/image/fetch/$s_!jBhf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba421d31-b854-43b9-bb21-9e9d037ed517_1758x1081.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></p><p>The UI between the two builds diverges, not just in style but in functionality. One generation included a filter feature; the other didn&#8217;t.</p><p>Only one build included persistent storage. This shows how different two outputs can be&#8212;and how those differences translate to substantial variations in functionality and quality.</p><p>The prompt explicitly told Codex it was building a &#8220;note-taking app,&#8221; so it understood the task. And persistent storage is a standard feature in note-taking apps. Why use the app if you can&#8217;t save your notes?</p><p>Even &#8220;simple&#8221; note-taking apps include persistent storage. Yet 50% of the time, the LLM failed to include it!</p><h2>Tier 1</h2><p><a href="https://github.com/parkerdorris/DeterministicCodeExperiments/blob/master/NoteTakingDemo/tier1/prompt_material/tier1_prompt.md">The prompt</a> for tier 1 has two short sections: one detailing required features and another specifying what Codex can decide on its own.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uSgl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uSgl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uSgl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic" width="1443" height="1145" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1145,&quot;width&quot;:1443,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76188,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.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_!uSgl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!uSgl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d9194a-a127-456a-ac44-6faa30d3be87_1443x1145.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9AIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9AIL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 424w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 848w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 1272w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9AIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic" width="1456" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43517,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.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_!9AIL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 424w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 848w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.heic 1272w, https://substackcdn.com/image/fetch/$s_!9AIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a185260-1b6c-47be-bc19-346cbdc5e338_2015x1069.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></p><p>The UI for tier 1 still differed about as widely as it did for tier 0. Also, as with tier 0, only one of the two generated apps supported persistent storage.</p><p>The source code for the two apps created at tier 1 diverged as much&#8212;or possibly more&#8212;than tier 0. One instance had significantly more files than the other, primarily because of how Codex divided the source code across files.</p><h2>Tier 2</h2><p>All four apps from tiers 0 and 1 worked on the first try. I queried Codex with my prompt, it generated code, and the app ran successfully without any debugging or updates.</p><p>Starting at tier 2, none of the generated apps worked without additional prompts. The package.json file&#8212;which contains project requirements and dependencies&#8212;wasn&#8217;t being generated.</p><p>This was an unexpected consequence of making prompts more deterministic. Because I didn&#8217;t explicitly ask for package.json to be created <em>and</em> my prompt restricted Codex&#8217;s creativity, the file wasn&#8217;t created. In this case, &#8220;creativity&#8221; means knowing to create mandatory files without being explicitly told to do so.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nVOC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nVOC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 424w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 848w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 1272w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nVOC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic" width="1456" height="787" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38130,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.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_!nVOC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 424w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 848w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.heic 1272w, https://substackcdn.com/image/fetch/$s_!nVOC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5b5b966-bd65-485c-9622-870fca5bab82_2090x1129.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PrjM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PrjM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PrjM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60655,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.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_!PrjM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!PrjM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa327ad-261f-419a-8345-6ff2c3213d4c_2126x1145.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></p><p>The UI is starting to converge. This is the first pair of generated apps with a nearly identical layout. This matters because while my tier 2 prompt includes specific sections on app requirements and &#8220;UI&amp;Flow,&#8221; the final section still lets Codex decide &#8220;exact layout and styling.&#8221; My conclusion: even though Codex was nominally free to design the UI however it wanted, the tightening constraints elsewhere in the prompt narrowed its generative reasoning to a semantic space where note-taking apps &#8220;just look like that.&#8221;</p><p>Of course, this is a small sample set. Running many more iterations would help reveal the variety of note-taking app styles within the more concentrated semantic space reached by tier 2&#8217;s prompt.</p><h2>Tier 3</h2><p><a href="https://github.com/parkerdorris/DeterministicCodeExperiments/blob/master/NoteTakingDemo/tier3/prompt_material/tier3_prompt.md">Tier 3&#8217;s prompt</a> is significantly more prescriptive, including code snippets that explicitly define data structures.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-QQA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-QQA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 424w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 848w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 1272w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-QQA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic" width="1456" height="979" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:979,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21891,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.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_!-QQA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 424w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 848w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.heic 1272w, https://substackcdn.com/image/fetch/$s_!-QQA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77cfda36-9797-4399-9d75-be1c74792bf6_1705x1146.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cBBt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cBBt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 424w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 848w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 1272w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cBBt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic" width="1456" height="734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16891,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.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_!cBBt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 424w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 848w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.heic 1272w, https://substackcdn.com/image/fetch/$s_!cBBt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b618f7-d61b-4a44-b5d4-9a95df7d6281_2111x1064.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></p><p>At this point, the semantic space the prompt drives Codex into has a clearly defined idea of what an unstyled note-taking app should look like. The only unique UI features are superficial, such as where the &#8220;pinned&#8221; emoji appears on screen.</p><p>The note pinning feature has been common since tier 2 but appears in <em>no</em> tier 0 or 1 generations. The obvious explanation: tier 2&#8217;s prompt explicitly lists it as a requirement. Still, it&#8217;s interesting that the more creative early tiers never thought of pinning&#8212;another fairly standard feature in note-taking apps.</p><h2>Tier 4</h2><p>The final tier for this experiment is the first where <a href="https://github.com/parkerdorris/DeterministicCodeExperiments/blob/master/NoteTakingDemo/tier4/prompt_material/tier4_prompt.md">the prompt</a> is framed as a full PRD. If I ran this experiment again, I would place the prompt in a separate file to refer to as a PRD, rather than again just copy the text into Codex&#8217;s chatbot interface.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2WXh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2WXh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2WXh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic" width="1456" height="836" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:836,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16255,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.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_!2WXh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 424w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 848w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.heic 1272w, https://substackcdn.com/image/fetch/$s_!2WXh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F861f3fee-03bd-4155-a828-4abe08567892_1994x1145.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lCpI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lCpI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 424w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 848w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 1272w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lCpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16698,&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.switchingcontext.com/i/179106290?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.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_!lCpI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 424w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 848w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.heic 1272w, https://substackcdn.com/image/fetch/$s_!lCpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb1f8fcf-881a-4ea7-ac9c-e32c0d9ef533_2092x1118.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></p><p>The UI is effectively fully converged between app version 1 and 2 at this tier. In this PRD, there is an instruction to &#8220;render the 2-column layout exactly.&#8221; Still, in my opinion there is still quite a bit of variation that could have been attempted that Codex doesn&#8217;t explore.</p><p>This is also the first tier where entire chunks of code in the most critical files are effectively identical. The specificity of the PRD was comprehensive enough that the generation process produced nearly the same code path through the model&#8217;s decision tree from beginning to end of files. Considering the vast number of possible token sequences available in Codex&#8217;s parameter space, achieving such consistent output through prompt engineering alone is noteworthy.</p><h2>Next steps</h2><p>One key lesson: every LLM output is probabilistic, but deviations between successive generations decrease as prompt specificity increases. This isn&#8217;t surprising, but it&#8217;s striking how visually obvious the pattern becomes when comparing just two generations from the same prompt.</p><p>Some other lessons are more interesting:</p><ul><li><p>Adding too much constraint without sufficient guidance can introduce bugs or missing features in the generated code.</p></li><li><p>Without enough specificity, two apps from the same prompt won&#8217;t just look different&#8212;they&#8217;ll have different features and varying quality. This suggests the best code generation results come either from writing highly specific prompts or generating the same app multiple times and cherry-picking features from each version.</p></li></ul><p>That last point brings us full circle: we&#8217;re beginning to appreciate the value of the wide variety of code generated by that roomful of infinite monkeys.</p><p>I&#8217;m interested in learning more about how different balances of creativity and determinism affect a codebase. For my next experiments, I plan to add features to an existing project while varying both the specificity of feature prompts and the availability of supporting context like API contracts.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[Alignment vs. creativity in generative code development]]></title><description><![CDATA[The pros and cons of deterministic code generation and planning for some experiments]]></description><link>https://www.switchingcontext.com/p/alignment-vs-creativity-in-generative</link><guid isPermaLink="false">https://www.switchingcontext.com/p/alignment-vs-creativity-in-generative</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sun, 02 Nov 2025 15:02:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MFVY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>By now, most of us have tried generating images using text-to-image LLMs. Every model I&#8217;ve used shares one behavior: submitting the same prompt multiple times produces substantially different images each time. Here&#8217;s a quick example from a prompt I gave ChatGPT&#8217;s image generator:</p><blockquote><p>Give me an image of a character that is a desktop-style fan with arms that uses its own operational fan blades to blow bubbles using a bubble wand. Bubbles should be in the air around the character. Style should be 40s-50s cartoon animation. Background should be interior of a period appropriate home, rendered with colors that match the style of that period of animation.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MFVY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MFVY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 424w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 848w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 1272w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MFVY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic" width="728" height="718" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1436,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:445452,&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.switchingcontext.com/i/177799224?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MFVY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 424w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 848w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.heic 1272w, https://substackcdn.com/image/fetch/$s_!MFVY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd30214bd-721d-47a8-a9d2-9c73c301fcfe_1636x1613.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pq9K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pq9K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 424w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 848w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 1272w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pq9K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic" width="1456" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:679315,&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;:false,&quot;internalRedirect&quot;:&quot;https://www.switchingcontext.com/i/177799224?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.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_!Pq9K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 424w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 848w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 1272w, https://substackcdn.com/image/fetch/$s_!Pq9K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd39b8a-d740-46b2-9ea7-5840654eb191_2360x1540.heic 1456w" sizes="100vw"></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">Two different generations from the same image prompt</figcaption></figure></div><p>While the generated images both follow my prompt&#8217;s guidance, I did not specify every detail to be generated. Each missing element&#8212;the number of bubbles, the fan&#8217;s direction, the furniture&#8217;s color&#8212;and every ambiguity&#8212;what exactly does &#8216;40s/&#8217;50s animation style look like?&#8212;requires the LLM to guess and imagine how those parts of the image should be rendered.</p><p>It&#8217;s that &#8220;guessing&#8221; and &#8220;imagining&#8221; I&#8217;d like to explore in a code generation context in a few articles. Throughout these articles, I&#8217;ll refer to this guessing and imagining behavior as <em>creativity</em>.</p><p>Describing an LLM as creative is controversial, even threatening, especially when discussing LLM integration into industries driven by artistry and human expression. For now, I want to sidestep those considerations and focus on creativity in a code generation context.</p><p>How important is creativity for successful AI code generation? Could LLM creativity actually be counterproductive in coding tasks such as new feature generation and code maintenance?</p><h2>Why deterministic LLM output could be useful</h2><p>When code generation is less deterministic and more creative, generating the same codebase twice produces different function names, variable names, file structures, and even logic. Even with identical prompts and context, random seeds and uncontrolled tool responses cause the LLM to make different choices each time.</p><p>The cartoon demo in the intro illustrates this: two identical prompts produce distinct images of bubble-blowing fans.</p><p>Software engineers rely on deterministic code compilation and project building. Especially with resource-constrained targets like microcontrollers, developers expect the same toolset and unchanged codebase to produce identical code every time they build the project.</p><p>This deterministic output is essential for debugging, maintaining standards compliance, and enabling reliable firmware updates in the field.</p><p>Generating reliably deterministic output from AI-assisted code generation tools could provide similar benefits. In a prompt-first development workflow, deterministic code output would enforce codebase stability, helping with review, regression testing, and diffing. Adding new features, rolling back portions of the codebase, and partial regeneration of code all become safer and less disruptive.</p><p>As LLMs begin writing code for embedded applications, deterministic output could eventually enable code generation for real-time operations where tight timing must be maintained.</p><p>Still, I can&#8217;t help but feel we lose more than we gain if we eliminate creativity from an LLM entirely. An LLM without creativity is basically a natural language compiler&#8212;a useful tool, but one that doesn&#8217;t take full advantage of an LLM&#8217;s capabilities.</p><h2>Alignment</h2><p>On the spectrum of LLM output, creativity&#8217;s opposite is alignment. LLM alignment provides guardrails and ensures adherence to safety norms and constraints. It also applies to the training necessary to develop capabilities for successfully completing tasks like writing code. Alignment enables determinism.</p><p>How can a developer achieve alignment in LLM output? Besides setting the LLM output temperature to 0, controlling random seeds, and choosing the right model for a project, the level of determinism in code generation is a function of context. The more specific the context the developer provides, the more deterministic the output.</p><h2>Next steps</h2><p>In the next few articles, I&#8217;ll explore how LLM code generation varies when building the same project with different amounts of context. I&#8217;ll experiment across a spectrum&#8212;from loose &#8220;vibe coding&#8221; to rigidly defined software development practices. This means adjusting the detail in PRDs, architecture documents like API contracts, and the prompts I give the LLM. I&#8217;ll also need a standard process to measure the qualitative and quantitative differences from build to build.</p><p>I believe software teams will develop strategies to deliberately balance creativity and alignment in code-generating LLMs throughout a project&#8217;s lifecycle. Hopefully, my experiments over the next few weeks will help illustrate:</p><ul><li><p>How much an LLM&#8217;s output varies from generation to generation due to ambiguities and missing context</p></li><li><p>How developers can curate context to balance alignment and creativity in LLM output</p></li></ul><p>Note: In these articles, my thoughts on alignment and creativity are informed in part by a book I&#8217;m reading, <a href="https://maya-ackerman.com/creative-machines-book/">Creative Machines: AI, Art, and Us</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[Exploring ChatGPT connectors]]></title><description><![CDATA[I used OpenAI&#8217;s new support for MCP to enable ChatGPT to scan for Bluetooth devices]]></description><link>https://www.switchingcontext.com/p/exploring-chatgpt-connectors</link><guid isPermaLink="false">https://www.switchingcontext.com/p/exploring-chatgpt-connectors</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sun, 26 Oct 2025 15:51:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-rRc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://substack.com/home/post/p-176586703">last post</a>, I mentioned that OpenAI recently opened up support to run apps &#8220;inside ChatGPT.&#8221; What this really means is that OpenAI now offers first-class support for MCP, similar to what Anthropic has offered for some time. This framing of app integration as &#8220;connectors&#8221; is more user-friendly and shows how OpenAI&#8217;s marketing and UI teams may have a better touch for non-enterprise markets.</p><p>The more I read about connector support opening up in the coming months, the more intrigued I became about how the system works. Just how hard would it be to create an MCP server and connect it to the ChatGPT chatbot?</p><p>I spent a few weeks developing an MCP server concept for debug instruments (<a href="https://substack.com/home/post/p-172356800">link</a>). For this project, I wanted to create something new for a ChatGPT interface while exploring how these web-first tools reach outside their chat interface to interact with the real world.</p><p>My goal for this ChatGPT-compatible MCP tool was simple: scan for Bluetooth Low Energy devices near the user. I wanted to open ChatGPT, type &#8220;what Bluetooth devices are nearby,&#8221; and get a list of names with rough proximity metrics.</p><h2>Scanning for Bluetooth devices</h2><p>Most people know Bluetooth from wireless headphones and car connectivity, but those devices use Bluetooth Classic. In 2010, the Bluetooth 4.0 specification introduced Bluetooth Low Energy (BLE), a protocol designed for lower power consumption, simpler pairing, more flexible network topologies, and battery-powered IoT devices. Today, your keyboard, mouse, smartwatch, continuous glucose monitor, insulin pump, heart rate monitor, and billions of other devices support BLE.</p><p>A key feature of BLE is its advertising mechanism. BLE devices broadcast small data packets called advertisements on three dedicated channels in the 2.4 GHz ISM band. These advertisements serve two purposes: they can transmit small amounts of data directly to any listening scanner (commonly used by sensors and health monitors), or they can indicate that a device is available for connection. When a scanner detects a connectable advertisement, it can initiate a connection to establish a bidirectional channel with higher bandwidth and security.</p><p>Scanners can also estimate distance to an advertising device by measuring signal strength, called the Received Signal Strength Indicator (RSSI), measured in dBm. While RSSI provides only a rough distance estimate due to environmental interference, it&#8217;s useful for proximity detection.</p><p>This advertiser-scanner relationship is what I&#8217;ll be exploring with this MCP server. I want ChatGPT&#8217;s chatbot to interface with a server running locally on my machine that acts as a scanner for active Bluetooth advertisers, reporting back information from the advertisement payload and RSSI values.</p><p>I&#8217;d like to eventually build more sophisticated Bluetooth interactions, especially around spatial awareness derived from RSSI. But for now, I want to see how difficult it is to retrieve basic Bluetooth information.</p><h2>Rube Goldberg&#8217;s LLM-powered Bluetooth scanner</h2><p>All this &#8220;running apps inside chat&#8221; marketing is really an official process for connecting remote LLM-powered agents to tools and data through HTTP requests. I write a query locally, and the remote agent responds by calling remote MCP servers over the internet. Using additional context from those servers, the agent sends a response back to me through chat.</p><p>In this experiment, the MCP server runs locally on my Mac mini. It exposes a single tool that scans for Bluetooth LE advertisements for a set period, then responds with a list of discovered devices and all the information the scanner has learned about each one.</p><p>This is obviously a needlessly complex process, with data looping between local and remote endpoints just to scan for Bluetooth devices. You could easily handle this task locally using phone apps or operating system control panels. Nevertheless, I think this test hints at a trend we&#8217;ll see with agentic systems in the future.</p><p>But before we get into speculation, let&#8217;s look at how the experiment works. For those interested, the demo&#8217;s source code is available here:</p><p><a href="https://github.com/parkerdorris/MCP_BluetoothScanner/tree/main">GitHub repo</a></p><h2>Building the MCP Server</h2><p>After iterating on a PRD for a Bluetooth Low Energy scanner wrapped by an MCP server, I used OpenAI&#8217;s Codex CLI to generate the project. My somewhat naive thought was that since Codex, ChatGPT, and the new SDK APIs to support &#8220;connector&#8221; MCPs all come from the same company, Codex might have the best chance of building a working system.</p><p>Interestingly, Codex&#8217;s questions suggested it had trouble finding the SDK documentation on OpenAI&#8217;s site. I had to point it in the right direction.</p><p>After that hiccup, Codex built the MCP server without much trouble, at least until I ran local test calls to retrieve nearby BLE device data. I spent time parsing through the JSON listing because some data seemed incorrect or missing. Through trial and error, the server eventually returned a reliable list of devices by name, address, and RSSI value. Once everything looked right, I exposed the server to the internet through ngrok and began trying to connect it to ChatGPT.</p><h2>ChatGPT as MCP Client</h2><p>After switching ChatGPT to developer mode, I navigated to the Settings menu and found the New Connector screen where I entered the HTTPS server location and metadata. Clicking &#8220;Create&#8221; immediately triggered requests to my server, visible in my terminal. Success&#8230;except the calls failed and nothing worked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-rRc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-rRc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 424w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 848w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 1272w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-rRc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png" width="474" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:474,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65048,&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.switchingcontext.com/i/177184003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.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_!-rRc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 424w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 848w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.png 1272w, https://substackcdn.com/image/fetch/$s_!-rRc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ee015c9-01d5-41e7-a462-f4a2fe004ad8_474x688.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">This is the menu where users can attempt to connect custom MCP servers to ChatGPT. Notice how clearly OpenAI communicates risk here.</figcaption></figure></div><p>An interesting sidenote: MCP as a standard relies heavily on natural language in its protocol. While tool declarations, command responses, and other data are expressed in JSON format, much of the information is provided in natural language. The only text in the codebase describing the &#8220;scan now&#8221; tool&#8217;s functionality to connecting clients (in this case, ChatGPT as the MCP client) is &#8220;Perform a one-shot Bluetooth LE scan and return discovered devices.&#8221; The AI must read and interpret this statement to determine when this tool might help respond to a query.</p><p>Even on its first attempt, this simple tool definition was enough for ChatGPT to understand that when I asked about BLE devices, it should try using this tool. The problem was that the tool wasn&#8217;t responding in a format ChatGPT expected.</p><p>Debugging became an iterative process of examining terminal output and ChatGPT responses, copying logs and taking screenshots to relay back to Codex. Codex eventually resolved all the bugs and delivered an MCP server that functioned as ChatGPT expected.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!26H0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!26H0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 424w, https://substackcdn.com/image/fetch/$s_!26H0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 848w, https://substackcdn.com/image/fetch/$s_!26H0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 1272w, https://substackcdn.com/image/fetch/$s_!26H0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!26H0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png" width="476" height="85" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:85,&quot;width&quot;:476,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10006,&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.switchingcontext.com/i/177184003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.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_!26H0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 424w, https://substackcdn.com/image/fetch/$s_!26H0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 848w, https://substackcdn.com/image/fetch/$s_!26H0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 1272w, https://substackcdn.com/image/fetch/$s_!26H0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e6294d1-ee2b-4f74-a026-62ffdab8451e_476x85.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Once ChatGPT finally approved my server, it appeared on the list of Connectors alongside approved connections to Google drive, Spotify, and others</figcaption></figure></div><p>ChatGPT approved the server connection, and the chatbot could now scan for Bluetooth devices in my room whenever it determined that answering my prompts required such information.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fj9C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fj9C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 424w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 848w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 1272w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fj9C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png" width="1351" height="1257" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df931460-51b2-40a7-991b-ea097489ddab_1351x1257.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1257,&quot;width&quot;:1351,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:735745,&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.switchingcontext.com/i/177184003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.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_!Fj9C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 424w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 848w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.png 1272w, https://substackcdn.com/image/fetch/$s_!Fj9C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf931460-51b2-40a7-991b-ea097489ddab_1351x1257.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">Using my Mac Mini-hosted server, ChatGPT scans my house for Bluetooth devices</figcaption></figure></div><p>Seeing success with my first prompt, I wanted to see if ChatGPT understood the tool&#8217;s output to the point where it could interpret the data and provide meaningful insights. For this next experiment, I placed my AirPods case close to my Mac mini, so that the signal strength of the Bluetooth advertisements from the case should have relatively high RSSI.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z4-1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z4-1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 424w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 848w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 1272w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z4-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png" width="691" height="101" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:101,&quot;width&quot;:691,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14103,&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.switchingcontext.com/i/177184003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.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_!Z4-1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 424w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 848w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 1272w, https://substackcdn.com/image/fetch/$s_!Z4-1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1906f661-f8c9-4705-b601-6e5a463e84c3_691x101.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TObd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TObd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 424w, https://substackcdn.com/image/fetch/$s_!TObd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 848w, https://substackcdn.com/image/fetch/$s_!TObd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 1272w, https://substackcdn.com/image/fetch/$s_!TObd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TObd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png" width="700" height="428" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:428,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62510,&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.switchingcontext.com/i/177184003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.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_!TObd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 424w, https://substackcdn.com/image/fetch/$s_!TObd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 848w, https://substackcdn.com/image/fetch/$s_!TObd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.png 1272w, https://substackcdn.com/image/fetch/$s_!TObd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b7d5ad1-03b8-4ab6-93d4-f9f4c4b25c6c_700x428.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">Note here that ChatGPT made the leap from my prompt saying&#8220;highest RSSI&#8221; to &#8220;This means those AirPods are the closest device in range.&#8221;</figcaption></figure></div><p>Let&#8217;s take a step back and consider the LLM-powered agent&#8217;s reasoning process and sequence of actions. When I asked ChatGPT to identify the Bluetooth LE device with the highest RSSI near me, the agent had to: understand I was requesting Bluetooth information, check its available tools to confirm it could measure conditions in my physical proximity, call the server on my machine, identify my AirPods, and report that information back to me. This demo offers two interesting perspectives: its implications for user experience design, and what it reveals about LLMs&#8217; ability to interact with the physical world.</p><h3>The local execution advantage</h3><p>While this demo takes a circuitous path through remote servers to perform a simple BLE scan, consider how different it would be with purely local LLM execution. Imagine asking your phone, computer, or smart home hub to help find your AirPods. A local LLM-driven agent could use available BLE scanners to detect and even triangulate the device&#8217;s location. With everything happening locally, security risks are minimized and response times are fast. The actual BLE scanning would be the slowest part of the process. This synthesis of real-world sensing, local inference, and natural language interaction represents the kind of intuitive human-machine interface that tech companies have been racing to deliver for years.</p><h3>The broader implications of AI sensor access</h3><p>It&#8217;s critical to consider the implications of MCP potentially providing AI systems with global-scale access to sensor data. The proliferation of Internet of Things devices across industrial, commercial, consumer, and even non-terrestrial environments means our world is increasingly instrumented with electronics. These devices continuously sense their surroundings, measuring temperature, acceleration, capturing images, detecting motion, and more, before transmitting their data across networks that could feasibly become accessible to AI through standardized protocols like MCP.</p><p>What observations, insights, and predictions could such a system make about the world and the people in it? The technological innovations most worth pursuing are those that, on balance, make us safer, healthier, happier, or wiser. AI has the potential to help us achieve these goals, but those of us in technology and regulatory fields must work together to ensure we gain more from this technology than we sacrifice in security, privacy, and autonomy.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[Custom Apps vs. AI-First mobile operating systems]]></title><description><![CDATA[Some failed PoCs helped me better understand what we want out of our mobile apps and how AI might impact UX at the OS level, not the app level]]></description><link>https://www.switchingcontext.com/p/custom-apps-vs-ai-first-mobile-operating</link><guid isPermaLink="false">https://www.switchingcontext.com/p/custom-apps-vs-ai-first-mobile-operating</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sun, 19 Oct 2025 19:32:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eK0m!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://www.switchingcontext.com/p/could-ai-code-assist-unlock-a-new">last post</a>, I speculated about customizable apps and where UI might head in the future. Since then, I&#8217;ve experimented with a few proof-of-concept &#8220;DevBot&#8221; ideas using a chatbot-style window. In one POC, prompts through this chatbot called ChatGPT models, which generated code that integrated into the React-based front end to add features. In another POC, I tried calling Cursor&#8217;s <a href="https://cursor.com/docs/background-agent/api/overview">background agent API</a> to implement new features.</p><p>Both proof-of-concept websites mostly proved two already-obvious points:</p><ol><li><p>It&#8217;s hard to graft together LLM outputs to create a simple one-shot code generation environment</p></li><li><p>It&#8217;s dangerous for a website to perform brain surgery on itself</p></li></ol><p>The main blocker was that the &#8220;DevBot&#8221; interface needed much more control over the backend code builder, and the chat UI needed to be far more interactive. Basically the interface needed to be more like the agent chat interfaces in Cursor/VS Code. When I asked the DevBot to add real functionality, such as asking it to &#8220;add a box to the home page showing today&#8217;s weather,&#8221; it was completely beyond its capabilities, even after I forced the backend to carefully parse error messages and iterate on the code.</p><p>All these excuses aside, I could get the chat window to make superficial CSS changes (&#8221;make the background color of this page dark blue&#8221;) successfully. I could also make simple HTML edits through the interface (&#8221;add a link to the text on the contact page&#8221;).</p><p>Anyone who&#8217;s dived head first into a project without sufficient planning will probably recognize that feeling where every step only reveals two more steps before you reach your goal. That&#8217;s how these projects felt.</p><p>One thought struck me as I experimented with these POCs, staring at the empty text box in the &#8220;DevBot&#8221; chat window: how intimidating that text box was. Even though I knew my clunky little DevBot POC could barely make anything other than font and color changes, the possibility of requesting any feature from my phone felt intimidating.</p><p>I began to wonder whether my speculation in my last post was wrong-headed. Is there really any value in making the mobile app user experience extremely customizable? Maybe the evolution of modern mobile apps from their starting point in the 2000s to today provides some insights.</p><h2>Why apps are the way they are</h2><p>iOS and Android apps in the 2000s were siloed, isolated experiences. They couldn&#8217;t run tasks in the background, sharing options were limited, and notifications didn&#8217;t really exist.</p><p>Android innovations on first-gen mobile apps found their way into iOS with a lag of a year or more. Android 1.5 supported home screen widgets, which were one of the first instances of a mobile app surfacing data <em>outside</em> the app interface itself. Widgets have since evolved into information-rich app surfaces supported by both iOS and Android.</p><p>Notifications came next, allowing apps to send short messages to users outside the app itself. iOS&#8217;s Notification Center gathered all these notifications in one place. App developers probably worried about this change, since it meant they had less control over when and how users saw their content. However, notifications were designed to bring users back into the apps. My guess is that app developers ended up with more total user engagement and revenue from notifications than they lost from people spending less time browsing within their apps.</p><p>Over time, notifications became more descriptive and interactive. Tapping a notification could open the corresponding app. Later, notifications offered richer UI, letting users type responses into text boxes within the notification to complete an interaction (e.g., &#8220;Send this message&#8221;) without ever opening the app.</p><p>Mobile apps&#8217; evolution toward interactive surfaces <em>outside</em> siloed apps indicates the likely path forward. We&#8217;re already seeing AI integration with notification surfaces, where notifications are summarized by AI to condense what has become a cacophony of mobile app notifications.</p><h2>Next steps as AI intercepts UI in mobile apps</h2><p>Deeper AI integration into mobile apps will likely change mobile applications in two major ways:</p><ul><li><p>Cross-app integrations for agentic, autonomous operation</p></li><li><p>Deep and personalized natural language summary and notifications</p></li></ul><p>It remains to be seen how long mass market adoption will take. I find it hard to imagine mainstream users handing over purchasing power to agents without multiple authorization gates. Similarly, as the potential drawbacks of using AI for data access become well known, a stigma about hallucinating AI will likely mean most users approach AI summarization with a &#8220;trust but verify&#8221; mindset. Users will still want to click into a summary and find information directly.</p><p>Also, any deeper app customization that breaks down existing app design patterns will run up against a simple fact: broadly speaking, we like the way our apps work today. We enjoy (or at least we&#8217;ve been conditioned to enjoy) endlessly scrolling through social media feeds. Our scrolling thumbs have muscle memory.</p><p>Jumping back to the anxiety of that blank text box where I could potentially ask for any feature: I think given sufficient design power, most users would still design user interfaces more or less like the ones we&#8217;ve all been conditioned to use. Instead of some bold new agentic &#8220;build your own apps&#8221; interface on mobile, we&#8217;ll see a continued, slow, but relentless march toward opening up more unified app surfaces where AI-driven summarizations and intuitive operations still support business models that rely on driving users into the apps themselves.</p><p>I think that will continue being the case, even after LLMs begin running apps from within ChatGPT and similar chatbot interfaces.</p><h2>Running apps Within ChatGPT</h2><p>OpenAI recently <a href="https://openai.com/index/introducing-apps-in-chatgpt/">announced</a> a new SDK that lets app developers integrate their features into ChatGPT&#8217;s chat interface. The pitch is straightforward: users can chat with apps like Spotify and Zillow through ChatGPT&#8217;s natural language interface.</p><p>OpenAI enabled this using APIs built around Model Context Protocol. App developers can use the SDK to build these features now, with a wider release planned later this year.</p><p>This represents another step in app developers seemingly giving up precious user attention from their mobile apps and websites. While this could look like an existential threat to their business model, their experience with mobile apps tells a different story&#8212;notifications and widget surfaces still drive users toward their apps, or more precisely, toward their data and algorithms.</p><p>OpenAI&#8217;s deep integration with other apps feels less like a threat to app developers and more like a way to encroach on mobile operating systems&#8217; control of attention. OpenAI&#8217;s agentic operations using deep linkage to third-party algorithms and data could act as a flanking maneuver around what Android and Apple are already attempting with their own AI integrations. If OpenAI or Anthropic reaches a critical mass of third-party app developers and nails the UX for third-party integrations before mobile operating systems do, it will be much harder for Apple and Google to keep up.</p><p>Maybe the real paradigm shift isn&#8217;t that mobile apps will break down under AI customization pressure, but that mobile operating systems themselves will buckle under the pace of innovation at leading AI companies.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[Could AI code assist unlock a new era of web and mobile user experience?]]></title><description><![CDATA[Speculative ideas about AI agents, app design, and the end of &#8220;static&#8221; mobile UX]]></description><link>https://www.switchingcontext.com/p/could-ai-code-assist-unlock-a-new</link><guid isPermaLink="false">https://www.switchingcontext.com/p/could-ai-code-assist-unlock-a-new</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 04 Oct 2025 14:55:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eK0m!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI-assisted code development tools exist on a spectrum between code visibility and ease of use. Tools like Cursor and Windsurf occupy the code-forward side, appealing to those already familiar with coding environments.</p><p>On the opposite end, platforms like l<a href="http://lovable.dev/">ovable.dev</a> make source code accessible but secondary. They target users who want to design apps without engaging with code at all.</p><p>The remarkable success of lovable.dev revealed my own bias about app creation. I had assumed the creative drive to build apps belonged primarily to those who could code. I believed technical skills preceded inspiration, but lovable.dev demonstrates these elements are actually independent. Lovable.dev&#8217;s impact shows that a much wider audience beyond software developers wants to create apps. It&#8217;s effectively unlocking creativity for everyone.</p><h2>How does a no-code dev environment evolve as LLMs improve?</h2><p>The LLMs powering lovable.dev and similar &#8216;no-code&#8217; app development tools will become increasingly powerful in both effectiveness and efficiency. They&#8217;ll generate better code while consuming fewer resources, eventually enabling LLMs to run on edge devices, particularly smartphones.</p><p>What happens when LLMs advance to where everyone can run a supercharged version of lovable.dev locally on their phones? Imagine a world where your smartphone has enough AI coding capability to create any app exactly as you want it, simply by describing your desired user experience.</p><p>If no-code development environments become highly capable, user-friendly, and run locally on devices, what new forms of creativity might this unleash?</p><h2>ChatBot, meet &#8216;DevBot&#8217;</h2><p>The next evolution beyond platforms like lovable.dev would likely be website and mobile app creation from within the app itself, using an interface similar to today&#8217;s chatbots.</p><p>On retail and commercial websites, you often see a chatbot in the corner answering customer questions. Now imagine instead a &#8220;DevBot&#8221; in that same corner, waiting to custom-build experiences based on your instructions. You&#8217;d simply click on the DevBot and describe what you want. Or, more likely, each user steadily customizes their user interface and functional particulars from some starting point template, supported by guardrails and limits.</p><p>If such a DevBot had sufficient power with deep OS integration through official APIs or on-device development sandboxes, and could access the content that fills today&#8217;s apps (social media, news, sports, streaming content), how might this transform our current website and mobile app landscape?</p><h2>Why mobile operating systems might enable something like this</h2><p>Let&#8217;s explore how a &#8216;DevBot&#8217; concept could transform mobile user interfaces. Why would operating systems relinquish such control to a DevBot?</p><p>This question reminds me of the story in <a href="https://www.notion.so/Feature-creep-in-the-agenetic-age-260a1b624ad680a0896ae5a17f8b7512?pvs=21">Walter Isaacson&#8217;s book</a> about Steve Jobs&#8217; initial resistance to opening the App Store to third-party developers. Jobs hesitated, doubting Apple&#8217;s ability to provide the necessary software tools, drivers, and libraries for app development.</p><p>Apple&#8217;s eventual release of an SDK and development tools for third-party apps unleashed a creative and business explosion that shaped today&#8217;s mobile experience dominated by third-party apps. This move also created an incredibly profitable revenue stream for Apple.</p><p>As no-code development environments like lovable.dev gain momentum and tools become increasingly user-friendly, it&#8217;s possible that companies owning phone hardware and mobile operating systems would find a way to natively incorporate no-code app development. If these companies establish effective monetization models, &#8216;DevBot&#8217;-style personalized control could fundamentally transform how we interact with our phones.</p><h2>How content providers fit into this concept</h2><p>We go online and use our phones to interact with and consume content largely owned by third parties. The amount of available online content is effectively infinite. From social media accounts to 24-hour streaming sports and news, games, and vast libraries of movies, books, music, and on-demand TV, we have endless ways to spend our time.</p><p>However, we navigate an online world of content consolidation. This consolidation serves a purpose: platforms like Facebook, Netflix, Amazon, and Google help us find signal in the noise. They curate the content we want and, in exchange, sell our attention to advertisers. This symbiotic relationship has benefited both companies and consumers.</p><p>If this era of &#8220;static&#8221; apps ever ends, I believe consumers gaining more control over how they access third-party content will drive that transformation.</p><p>This doesn&#8217;t mean content would become devalued or free. Content <strong>creators</strong> still need and deserve compensation. Rather, content <strong>providers</strong> might someday be compelled to cede enough control over their content to support deeply customized user experiences.</p><p>It&#8217;s a long shot, but if we gain more control over our feeds, the revenue models emerging in such an environment could be less exploitative and manipulative to both content creators and end users than the revenue models that drive technology today.</p><h2>Onto some experiments</h2><p>I plan to build a minimally functional proof of concept for a DevBot. I&#8217;ll begin with a DevBot-customizable web app template. My goal is to create something that can deploy website features that go beyond basic CSS edits. Let&#8217;s see if I make enough progress by next week to continue this series with a second part.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[Fake it 'til you make it]]></title><description><![CDATA[Using LLMs for spoofed data in development and testing]]></description><link>https://www.switchingcontext.com/p/fake-it-til-you-make-it</link><guid isPermaLink="false">https://www.switchingcontext.com/p/fake-it-til-you-make-it</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sun, 28 Sep 2025 21:26:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eK0m!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you&#8217;re a small team, or maybe just one developer, project planning boils down to:</p><ul><li><p>What component of the project should I work on first</p></li><li><p>When should I move away from that component and work on another bit</p></li></ul><p>I&#8217;ve faced this challenge as a solo firmware engineer balancing the development of different code components and test infrastructure. To test one component, I need a base level of functionality in other components. Creating stub functions and fake data to establish a clean data flow has traditionally been my solution.</p><p>Recently, I&#8217;ve found another approach: generating test inputs and spoofed data using an LLM. This method has surprising benefits alongside significant drawbacks. I believe that LLMs&#8217; tendency to &#8220;tell us what we want to hear,&#8221; which is a common and valid criticism, can actually be harnessed for good, at least in this specific use case.</p><h2>Problem: I needed human text input for testing and development</h2><p>I&#8217;ve been working on a project that&#8217;s centered around a text editor. The project&#8217;s LLM-driven agent makes observations on text in the editor and interacts with the user. Testing for this project has been a challenge because I needed text in the editor window that was relatively long (1K-10K words) and somewhat coherent. There are lots of ways of running tests with this system, but I had issues with all of them:</p><ol><li><p>Use dummy text, like the Latin placeholder text used in website or graphic design tools. This wasn&#8217;t viable because I needed to test system responses based on realistic English language inputs that reflected real-world content.</p></li><li><p>Write text input manually and use that for all testing. This approach wouldn&#8217;t work because I needed to test the system with a variety of writing styles and subject matter.</p></li><li><p>Scrape text from web sources for internal testing. I avoided this approach because finding different text sources with the specific writing styles I needed was tedious. I felt constrained by available content and worried I might miss critical test cases.</p></li><li><p>Give up on the 1K-10K requirement and just test with snippets. This had potential because it was definitely easier to write a paragraph instead of an entire story/article. I actually tried this as test input at first until I realized that the tests I wanted to run required a text input length that was longer than I had bandwidth to write by hand.</p></li></ol><p>Not seeing a path forward with the first set of options that came to mind, I settled on using an LLM to generate the text inputs based on parameters and guardrails. This system worked really well and led to a broader set of testing and feature development that hopefully I&#8217;ll write about sometime later.</p><h2>Can we call this fuzz testing with AI?</h2><p>While I&#8217;m stretching the definition a bit, using LLMs to spoof data streams resembles fuzz testing in security work. Fuzz testing bombards a system with high volumes of data or specially crafted inputs designed to test edge cases. These tests can reveal bugs when buffers overflow or memory pointers exceed their ranges. Such bugs may become security vulnerabilities, potentially exposing data or allowing attackers to force the system into undefined states.</p><p>In my case, I wasn&#8217;t hunting for security flaws. I simply wanted to stress test my project with diverse, valid inputs. Creating this test data manually would have taken days rather than minutes.</p><h2>Other cases where LLM-spoofed data might help</h2><p>While my example comes from a specific use case, these principles apply broadly. My system generated paragraphs of text, but LLMs could just as easily format data as JSON or structure it in any way needed for testing. Developers could use this approach to:</p><ul><li><p>Generate data payloads for stubbed API returns</p></li><li><p>Populate test databases with realistic data</p></li><li><p>Simulate stateful responses in sequential test scenarios</p></li></ul><p>The last bullet point represents where LLMs can provide unique value. You could develop an agent with specific prompts and memory that creates a responsive persona, one that dynamically interacts with a system under test.</p><h2>Limitations on the concept</h2><p>The main limitation of this testing approach is that LLM-generated content lacks the determinism of traditional test inputs. Even with strict system prompts and robust guardrails, the output may still require human oversight or post-processing to validate its suitability.</p><p>Cost presents another challenge when using LLMs for data generation, though several strategies can mitigate this issue. Selecting a cost-effective model that still delivers adequate quality and coherence is crucial. Additionally, deploying a local LLM within your development environment can eliminate per-token costs entirely compared to remote API calls.</p><p>Data spoofing itself isn&#8217;t new. Software and embedded engineers have long used simulated inputs during system development. What LLMs offer here is the ability to create data with controlled randomness that can effectively stress-test your system, challenge assumptions, and reveal hidden bugs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[Humans Vs. Web Scrapers]]></title><description><![CDATA[Positive developments toward a sustainable web publishing future]]></description><link>https://www.switchingcontext.com/p/humans-vs-web-scrapers</link><guid isPermaLink="false">https://www.switchingcontext.com/p/humans-vs-web-scrapers</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 20 Sep 2025 14:47:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eK0m!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.switchingcontext.com/p/feature-creeps-and-web-scrapers">Last week</a> I wrote about a project I'm working on that ethically scrapes websites for music-related information. Using AI code assistants to create systems capable of massive information gathering and synthesis is remarkably easy. This highlighted to me how crucial proper licensing and content access methods are for protecting web publishing and human-generated content. Here are some recent developments in web scraping and how these innovations might reshape how LLMs interact with the rest of the digital world.</p><p>The story of one recent development actually starts decades ago before social media dominated the web.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><h2>RSS and what came after</h2><p>In the 2000s, before social media funneled web publishing to their platforms, users like me discovered content through RSS feeds and aggregated them using tools like Google Reader. I never knew at the time that RSS stood for Really Simple Syndication. I didn't think to Google it, probably because I was too busy enjoying articles through Google Reader.</p><p>Like many good things, RSS and Google Reader fell victim to social media. This happened in two ways. Within Google, the Reader team was reassigned to work on Google Plus, despite the fact that <a href="https://www.buzzfeednews.com/article/jwherrman/google-reader-still-sends-far-more-traffic-than-google">Google Plus</a> never achieved the traffic levels that Google Reader enjoyed. Across the industry, social media platforms like Facebook lured news sites with promises of higher engagement and click-through traffic. With algorithmic feeds presenting users with content supposedly tailored to their preferences, what could go wrong?</p><p>In the decades since this migration to social platforms, digital publishing has struggled to survive. Now, LLMs scraping content without driving traffic to original sources may deliver the final blow to web publishing as a viable livelihood for writers online.</p><p>In a delightful twist of irony, a glimmer of hope for web publishing's future comes from one of RSS's original creators.</p><h2>Really Simple Licensing</h2><p>Created by the RSL Collective, the <a href="https://rslstandard.org/">RSL standard</a> aims to be an enhancement to robots.txt that standardizes how publishers license their content. This machine-readable license format clearly defines required attribution and payment terms for both crawling and inference.</p><p>One of the group's leaders is RSS co-creator, Eckart Walther. Though I haven't found interviews where Walther connects his past work on RSS to RSL, I appreciate that someone who once created a standard making online writing accessible (and in retrospect, sustainable) is now working to make news articles and creative writing sustainable again.</p><p>LLMs need to be knowledgeable and current to provide relevant answers to users. This requires training on vast amounts of online information and access to web scraping tools. The explosion of LLM usage works well for everyone <em>except</em> the human writers whose work forms the foundation these LLMs rely on.</p><p>The current system isn&#8217;t sustainable. If writers can't earn from their work, the situation will worsen beyond the damage already caused by decades of algorithmic chaos on social media. We'll likely see more lawsuits like the recent one where Anthropic agreed to pay hundreds of thousands of writers $1,500 each.</p><p>RSL offers an escape from this unsustainable future by standardizing how content creators tell AI companies and scrapers what content can be used and under what conditions. This could create consistent revenue streams to stabilize and nurture web publishing. We need this to work. Web publishing represents writing at its most vital and urgent, and our culture suffers when viewpoints diminish online and reliable news sources dwindle.</p><p>Whatever success my project achieves will largely come from value developed through material sourced online via APIs and rules in robots.txt files. Building my music discovery database has shown me the immense power of a smart script and well-constructed database when unleashed on the internet.</p><h2>Cloudflare&#8217;s strategy</h2><p>RSL is just one piece of the puzzle being assembled to protect writers and content owners against unlawful or impolite scraping. Since Cloudflare serves about 20% of web content online, any strategy they deploy will likely create ripple effects throughout the industry.</p><p>Cloudflare's strategy begins with blocking web scrapers by default unless content owners explicitly allow scraping. They also empower content owners to define specific scraper access rules: which parts of the site are accessible and under what conditions. Additionally, they're exploring a "pay per crawl" model. If Cloudflare or another company successfully productizes this approach, it would enable new business models for companies that cultivate and sell data to AI companies for training. While this is already happening to some extent, easily accessible, widely adopted tooling would significantly lower entry barriers for startups.</p><p>While the exact outcome remains uncertain, it's encouraging to see many in the tech industry working toward a sustainable future for web publishing.</p><h2>Preserving human creativity online</h2><p>With <a href="https://openai.com/index/how-people-are-using-chatgpt/">700 million weekly</a> ChatGPT users, adoption is both widespread and rapidly increasing. Yet for authors, filmmakers, musicians, and other creative professionals, generative AI often represents industrial-scale appropriation of their work.</p><p>These concerns are valid. AI companies have acknowledged in court documents that they haven't always adhered to copyright laws. Anthropic's recent <a href="https://authorsguild.org/news/what-authors-need-to-know-about-the-anthropic-settlement/">$1.5 billion settlement</a> with authors demonstrates that courts won't simply allow AI companies to disregard copyright protections in their pursuit of artificial general intelligence.</p><p>Practical, standardized licensing frameworks like RSL, paired with enforcement tools such as those Cloudflare are developing, can create a more sustainable and fair ecosystem for creatives, AI companies, and their users. Whether these measures will be sufficient to preserve web content creation remains uncertain, but it's encouraging that some in the tech industry are making sincere efforts to find equilibrium.</p><p>Fair compensation for creators is essential for reducing tensions between creative communities and AI. Another crucial element is transforming how online content is presented to clearly differentiate between human and AI-generated material. We may need entirely new design approaches for news readers and content platforms that intuitively signal whether users are consuming human or machine-created content.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[Feature creeps and web scrapers]]></title><description><![CDATA[At an architectural crossroads on an AI project using web data]]></description><link>https://www.switchingcontext.com/p/feature-creeps-and-web-scrapers</link><guid isPermaLink="false">https://www.switchingcontext.com/p/feature-creeps-and-web-scrapers</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 13 Sep 2025 13:54:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eAxZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the aspects of AI-assisted coding that I find most exciting is how it prioritizes architectural decision-making. As a developer, it's tempting to dive in headfirst, start coding, call it a PoC, and move on. You can fall into the same trap with AI code assistance by simply throwing prompts at the system to see what happens.</p><p>Of course, anyone who has tried this approach knows the result is typically an over-engineered, sputtering mutation of what you initially hoped to develop. Each increasingly desperate prompt to fix strange behavior only spawns new aberrations that require more frantic prompts until you eventually abandon the project in some forgotten GitHub repository. I suspect most people who've experimented with AI code tools have at least a few of these AI-conjured Feature Creeps locked away in digital basements. I certainly do.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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_!eAxZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eAxZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eAxZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg" width="1087" height="1640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1640,&quot;width&quot;:1087,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2900892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.switchingcontext.com/i/173510358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eAxZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eAxZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cd4c0ce-e1d5-4978-a4ec-ab4463d840b4_1087x1640.jpeg 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></p><h2>Trying to ensure my new project doesn&#8217;t turn into a Feature Creep</h2><p>My project relies on a curated dataset of music information available online. The eventual value of this project will depend on:</p><ul><li><p>The relevance, accuracy, and freshness of the dataset</p></li><li><p>How accessible the data is to a frontend tool</p></li></ul><p>This is fundamentally a data aggregation problem, where the tool increases the signal-to-noise ratio of dispersed or unwieldy information. For decades, websites have found success with data curation and aggregation:</p><ul><li><p>Job listings on Indeed and [monster.com](http://monster.com), etc.</p></li><li><p>Air travel info on [kayak.com](http://kayak.com), Travelocity, etc.</p></li><li><p>News sites like Apple News</p></li></ul><p>My system isn't trying to find visitors the cheapest plane ticket. I'm simply leveraging LLM creativity to generate cool music playlists. However, regardless of a project's scale or goals, careful architectural decisions remain critical, especially those affecting data ingest and curation.</p><p>First things first: how do I enable an LLM-powered agent to access the web and retrieve information?</p><h2>How ChatGPT&#8217;s web search works</h2><p>Anyone who has used chat interfaces like ChatGPT or Google Gemini has likely noticed the "searching the web" step that often appears after submitting a query. This standard feature exists across today's AI chat platforms. While it doesn't always guarantee accurate results, these web searches provide a degree of traceability since you can view the sources the AI used to formulate its response.</p><p>The LLM activates this web search tool whenever it determines your query requires internet-based information to answer properly. This capability was originally a standalone product called SearchGPT, <a href="https://www.theverge.com/2024/7/25/24205701/openai-searchgpt-ai-search-engine-google-perplexity-rival">which launched in 2024</a> before being integrated into ChatGPT.</p><p>Unfortunately, ChatGPT doesn't offer this web search tool through their developer APIs. Some other LLM providers like Anthropic and Google do offer ways to command their LLMs to search and summarize website information via APIs.</p><p>For this project, since I'm exclusively using ChatGPT's models and APIs, I needed to replicate the search function myself. This involves a two-step process: a script uses a tool to access web data, then feeds that information into ChatGPT's LLM for summary and processing.</p><h2>Accessing web data respectfully</h2><p>There are two primary approaches to retrieving data from web sources:</p><ul><li><p>Using APIs provided by websites that offer official access to their data</p></li><li><p>Utilizing web scraping libraries for websites without accessible APIs</p></li></ul><p>Before retrieving any information, it's crucial to review each website's terms of use. For sites with APIs like Wikipedia, these terms are clearly outlined in their documentation. The process typically involves creating login credentials, possibly paying for access, and then using the data within the established guidelines. It&#8217;s a straightforward engagement.</p><p>For websites requiring web scraping, determining permissible content access can be more challenging. Fortunately, many sites now include a "robots.txt" file specifically for web scraping agents. While robots.txt is a relatively recent development in web standards and its legal enforceability remains somewhat unclear, it provides essential guidelines for respectful site interaction that should be followed.</p><p>Robots.txt files inform agents (or humans reviewing the document) about:</p><ul><li><p>Permitted scraping areas</p></li><li><p>Prohibited zones</p></li><li><p>Access rate limitations to prevent server overload</p></li><li><p>Site maps to help locate information efficiently</p></li></ul><p>After developing initial music data, I used code assistant tools to create LLM-powered scripts for web access. My implementation prioritizes APIs when available and resorts to appropriate scraping techniques when necessary.</p><h2>Now that I know how to access data, what do I do with it?</h2><p>My project, in brief, helps visitors discover music recommendations through a backend agent that retrieves web-sourced music data. This agent creates playlists with creative sequencing based on song similarities and narrative qualities. The scripts mentioned earlier supply this web-sourced music data.</p><p>When designing a system reliant on web-sourced data, a key architectural decision is whether to store the dataset locally for the agent to access or have the agent perform fresh web searches each time&#8212;essentially, local versus network storage.</p><p>While I could build a proof of concept using either approach, my priority is finding the most cost-effective architecture that produces surprising and delightful results. If this tool isn&#8217;t fun to use, what&#8217;s the point?</p><h3>Local vs. web data: cost considerations</h3><p>Network access to music data with each visitor interaction requires agentic calls to APIs or web scraping tools, plus LLM summarization and information compilation. This web access must be well-structured with predetermined rules guiding the agent to the right information sources.</p><p>The main reason I consider this method less cost-effective than local storage is that visitors would likely request the same data repeatedly. Since the tool looks for relationships between songs, the LLM would need to search through content "live" each time. This creates enormous inefficiency in data compilation.</p><p>In contrast, a local relational database minimizes duplicate effort during data ingest. However, local access is only effective when the database contains all the necessary information for the LLM to create surprising and delightful playlists. Curating data so the LLM has everything it needs to generate truly surprising and entertaining playlists creates a form of "context anxiety,&#8221; which I talked about in a <a href="https://www.switchingcontext.com/p/brave-new-bugs">previous post</a>. This is a concern that I suspect has existed since the dawn of databases.</p><h3>Local vs. web data: quality considerations</h3><p>AI offers developers powerful tools to discover and curate data through agentic workflows, streamlining every step from identification and ingestion to categorization and tagging. My current work focuses on fine-tuning these curation mechanisms. I'm exploring various approaches to help the LLM identify interconnected aspects of popular music in ways that are both flexible and substantive.</p><p>Despite these efforts, I can't shake the concern that my results might not surpass what you'd get by simply asking ChatGPT to list songs with specific attributes.</p><p>Data freshness presents another challenge with local storage. While it's obvious that new music releases require database updates, the contextual information around music also evolves over time. Artists give interviews revealing new insights about their songs. Awards and recognition can trigger reassessments of an artist's work and create new connections between established and emerging musicians. Capturing these subtle shifts is difficult, but it&#8217;s something you essentially get "for free" when your system performs real-time web searches with each user interaction.</p><h2>Next steps in development</h2><p>While I feel confident that a curated, local dataset providing an LLM with &#8216;Goldilocks&#8217; context will unlock creativity in a way that&#8217;s far more scalable and cost effective than just diving into the web with every query, defining and maintaining the system architecture to actually do that curation remains a challenge for me. Hopefully I can keep the project on track and prevent the system from mutating into another Feature Creep.</p><p>There's a qualitative aspect to playlist output that's hard to test through automation. For now, I'll rely on manual comparison between what my curated dataset produces versus what ChatGPT casually spits out with a simple query. This will be the bedrock test case of my system testing. Hopefully I'll reach a point with this project where I can share it here for other people to test too, though I still have a ways to go. In the meantime, I'm hoping to write more articles in this series on some aspects of my database structure and how I'm using embeddings to coax the LLM toward unique and creative choices.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[Brave new bugs]]></title><description><![CDATA[AI code assist development pitfalls and context anxiety]]></description><link>https://www.switchingcontext.com/p/brave-new-bugs</link><guid isPermaLink="false">https://www.switchingcontext.com/p/brave-new-bugs</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 06 Sep 2025 15:03:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!936a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI drives technical innovations across every branch of science. A random broad sampling of innovations: we&#8217;re seeing <a href="https://www.wired.com/story/combining-ai-and-crispr-will-be-transformational/">AI deployed at CRISPR</a> to speed analysis of genome data to unlock medical advances, <a href="https://timesofindia.indiatimes.com/city/allahabad/iiit-a-researchers-develop-ai-tech-for-real-time-crop-disease-detection-in-indian-farms/articleshow/123370013.cms">AI deployed on farms</a> to reduce crop loss to feed more people, <a href="https://www.theguardian.com/technology/2025/jul/02/ai-helps-find-formula-for-paint-to-keep-buildings-cooler">AI inventing new types of paint</a> to keep buildings cool, and on and on.</p><p>AI is also helping us find innovative ways of writing buggy, broken code. In the few projects I&#8217;ve worked on so far, I&#8217;ve made mistakes I could have only really made through the use of AI code assist.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><h2>Background: I&#8217;ve been writing buggy code for decades</h2><p>I&#8217;ve spent time debugging systems from a few different POVs:</p><ul><li><p>As a customer-facing applications engineer, I reviewed customer code and schematics, debugging other people&#8217;s systems with sometimes-limited visibility into the full system</p></li><li><p>As a firmware engineer, debugging my own code with unit tests and system level regression tests</p></li><li><p>As a product manager, mostly in project reviews</p></li></ul><p>In all three of these roles, I had to debug issues by expanding scope to a system-level view. Runtime bugs especially required full understanding of how different components interfaced with each other.</p><p>Communication was just as important as technical insight. If I couldn't fix the bug myself, clearly explaining the problem became essential to finding a solution.</p><p>When working with an AI agent, communicating means providing context.</p><h2>Context fragmentation</h2><p>I've been working on a project intermittently for about a month, and its complexity has become unwieldy. Developing individual components in isolation while frequently switching to other projects created ill-fitting component interfaces with mismatched connections.</p><p>I only discovered these issues when running system-level tests, which failed at these interface points. Rather than recognizing the broader, systemic problem, I made the situation worse by asking the AI agent to fix what I mistakenly thought were isolated test escapes. The resulting proof of concept worked with carefully prepared test data but failed with most real-world scenarios.</p><p>The root cause was a communication breakdown between myself, the agent, and the codebase. The agent's understanding of the system drifted with each new chat thread as context became fragmented. Outdated architecture documents in the repository, which the agent referenced, made matters worse. Every prompt I gave the agent occurred in an environment with only partially valid context because I had allowed this fragmentation to occur.</p><p>To solve this, I asked the agent to audit the project, create a workflow diagram showing component interactions, and identify interface mismatches. I also had it revamp all documentation, now organized in the /docs/ directory. After reviewing these new architecture documents and the audit results, I cleaned up the directories and removed obsolete files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!936a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!936a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 424w, https://substackcdn.com/image/fetch/$s_!936a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 848w, https://substackcdn.com/image/fetch/$s_!936a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 1272w, https://substackcdn.com/image/fetch/$s_!936a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!936a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif" width="640" height="406" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:215576,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.switchingcontext.com/i/172743283?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!936a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 424w, https://substackcdn.com/image/fetch/$s_!936a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 848w, https://substackcdn.com/image/fetch/$s_!936a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 1272w, https://substackcdn.com/image/fetch/$s_!936a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177cfe12-fbc9-45d7-8aa9-8024f21b404b_640x406.gif 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">Tbe agent trying to explain my project to me</figcaption></figure></div><p>This must be an enormous potential issue in larger projects beyond my small proof of concepts. Having a trusted set of living, up-to-date architecture documents is absolutely essential, and something I'm maintaining from now on. Based on recommendations I've found online, I've also started creating a "<a href="http://brief.md/">brief.md</a>" file containing a concise description (under a few hundred words) of the project's current state, TODO items, and other important notes.</p><h2>Ghost APIs</h2><p>Another problem I encountered initially seemed like a classic AI hallucination, but turned out to be something stranger.</p><p>I asked the Agent to interface with a Python library. I had been moving smoothly through implementation on this project with few questions or mistakes from the agent. With this Python library, everything appeared to be going well. The agent included the library in the script, added code to interface with it, and proceeded to the next step in the build plan.</p><p>When it came time to test my progress, none of the function calls worked. The Agent had tried to use object methods that didn't exist. After checking the library documentation, I thought I had confirmation: the AI was simply making things up.</p><p>So I confronted it:</p><blockquote><p>Parker: i see you are using 'addComment()' method. Are you making that up?</p><p>Agent: Yes &#8212; the addComment() method I referred to is <strong>real and documented</strong> in Google Apps Script's Document class. It takes a Range object as the anchor and attaches a comment to that location in the document. Here's the proof:</p></blockquote><p>The agent then provided actual links to forum posts where real people had discussed using the same APIs that were causing errors in my Python script.</p><p>So it wasn't a hallucination. But what was it?</p><p>It wasn't a case of the forum discussing some unrelated library that the Agent's web crawler had misidentified.</p><p>And it wasn't a joke. The forum comments were sincere&#8212;the people discussing these APIs clearly thought they knew what they were talking about.</p><p>Then I noticed the dates on the comments: 2021. After some research, I confirmed that these APIs had been deprecated long ago.</p><p>The agent wasn't hallucinating. It was more like the agent was seeing ghosts.</p><p>I nudged the agent toward the truth:</p><blockquote><p>Parker: go to the link you provided above and read it today. there is no mention of addComment()<a href="https://developers.google.com/apps-script/reference/document/document?utm_source=chatgpt.com">https://developers.google.com/apps-script/reference/document/document?utm_source=chatgpt.com</a></p><p>Agent: You&#8217;re absolutely right &#8212; I went back and reviewed the official documentation at the link you provided (Google&#8217;s Apps Script Document reference), and there is no mention of addComment() anywhere. That method simply isn&#8217;t documented by Google .</p></blockquote><p>The agent confirmed what I had noticed earlier, explaining that the API had been deprecated, though it was officially supported at one time.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zlYT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zlYT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 424w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 848w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 1272w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zlYT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif" width="503" height="200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:503,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36955,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.switchingcontext.com/i/172743283?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zlYT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 424w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 848w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 1272w, https://substackcdn.com/image/fetch/$s_!zlYT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73f99f1-386b-468c-8ef3-826cc4fb1997_503x200.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Basically what the agent said to me</figcaption></figure></div><p>The lesson I learned is to always be specific about which versions of libraries and tools the agent should use in a project. For this particular bug, that would have been the simplest solution. The agent likely wouldn't have made this mistake if I'd included some boilerplate in the PRD like "always use the latest versions of all libraries used in the script."</p><h2>Sidenote: slopsquatting</h2><p>The issue described above, where AI appears to invent a non-existent library, creates a serious security vulnerability. Hackers who can predict which libraries an AI might fabricate could create malicious packages with those names. If I had installed such a package to match what my code was looking for, I could have unknowingly executed the hacker's code, essentially falling victim to an injection attack.</p><p>This security threat has occurred frequently enough to earn a specific and unpleasant name: slopsquatting. More information about mitigating this risk can be found here:<a href="https://www.techradar.com/pro/mitigating-the-risks-of-package-hallucination-and-slopsquatting">https://www.techradar.com/pro/mitigating-the-risks-of-package-hallucination-and-slopsquatting</a></p><h2>Context anxiety</h2><p>Both of these bugs I&#8217;ve encountered are related to context: either not having all of the context the agent needs, or having the <em>wrong</em> context. It&#8217;s challenging to get this balance right and decide what information needs to be in context.</p><p>I think we might start seeing articles about &#8216;context anxiety&#8217;: an anxiety rooted in lack of confidence in one&#8217;s ability to tell the LLM what it needs to know. A neurosis about whether we&#8217;re asking our questions to a machine the right way.</p><p>The thinking goes: if I can just provide the right context, Goldilocks-style, neither too much nor too little, I'll get a useful answer.</p><p>We can see this mindset already driving numerous context engineering how-to blogs and YouTube tutorials. The philosophy often explicitly stated in these resources is "If you give the LLM all the right information in the context, the output will be useful." To be clear, I generally agree with this position.</p><p>Memory for agents will likely evolve to address context size limitations, and leading LLMs are racing to deliver models with a context size to 1M tokens or beyond. If an LLM could process effectively unlimited information, consuming entire projects and precisely interpreting thousands of lines of API specifications, then the LLM should generate more useful code.</p><p>But would "infinite context" actually solve the problem of context anxiety? Perhaps it merely shifts the challenge from "context" to "focus." Software developers will still need to craft clear prompts, directing the LLM's attention and intent.</p><p>Through education and work experience, software engineers have learned to fix compile-time errors and runtime errors. Now they must also learn to fix <em>prompt-time</em> errors.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[MCP for instruments: final tests and conclusions]]></title><description><![CDATA[Using a simple pin monitor MCP server to test square wave frequencies and perform code profiling in Cursor]]></description><link>https://www.switchingcontext.com/p/mcp-for-instruments-final-tests-and</link><guid isPermaLink="false">https://www.switchingcontext.com/p/mcp-for-instruments-final-tests-and</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 30 Aug 2025 18:56:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NV5e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my last post, I integrated a pin monitor model context protocol (MCP) server into Cursor with the goal of using it for code profiling. My broader goal was to demonstrate how integrating instruments into agentic code generation will change debug and development.</p><p>My pin monitor MCP server&#8217;s Arduino board connected to another Arduino that would run simple sketches to illustrate debug scenarios. I thought my setup was ready for concluding test cases, but I was wrong.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><h2>How I fixed some bugs and worked around others</h2><p>In early testing, the agent frequently tried to exercise tools in ways that didn&#8217;t make sense. I decided that the issue might be that the agent just had too many options. The MCP server exposed too many tools.</p><p>I had let the agent over-design the solution until I had exposed around 30 nearly-useless and indistinguishable tools. After a lot of deletions and paring back, I was left with what seemed like the only functionality the monitor actually needed to configure and monitor for edge events.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NV5e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NV5e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 424w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 848w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 1272w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NV5e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic" width="1359" height="344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:344,&quot;width&quot;:1359,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26225,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.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_!NV5e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 424w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 848w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.heic 1272w, https://substackcdn.com/image/fetch/$s_!NV5e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F519c4aa1-2ff8-4e34-b262-4c8a9303d5a4_1359x344.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>Reducing the number of tools immediately improved the agent&#8217;s ability to understand how and when to use each tool available.</p><p>I ran into another issue I couldn't fix. In my first post, I described a 'virtuous development cycle' of writing, flashing, testing, and debugging code. Unfortunately, I discovered conflicts between the pin monitor MCP server and the Arduino CLI MCP server. The problem stems from the virtual serial port on the Arduino's debug interface. After flashing new firmware, the pin monitor becomes unresponsive until manually reset.</p><p>Rather than spend too much time fixing this issue, I settled on a workaround: I instructed the agent to give me a 10-second pause after programming the DUT so that I could disconnect and reconnect the USB interface. A crude, embarrassing hack, but it let me get to the fun stuff and continue testing.</p><h2>Fixing a square wave frequency</h2><p>Scenario I&#8217;m mocking up: a system produces a square wave output at a specified frequency. If a timer is incorrectly figured or if the clock source for the system is running out of spec, the square wave&#8217;s output might run at an incorrect frequency.</p><p>For this test I asked the agent to write a sketch for the DUT to output a square wave at 4 Hz.</p><p>Then, without any other testing, I gave it this prompt:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!72j3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!72j3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 424w, https://substackcdn.com/image/fetch/$s_!72j3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 848w, https://substackcdn.com/image/fetch/$s_!72j3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 1272w, https://substackcdn.com/image/fetch/$s_!72j3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!72j3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic" width="531" height="197" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:197,&quot;width&quot;:531,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21690,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.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_!72j3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 424w, https://substackcdn.com/image/fetch/$s_!72j3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 848w, https://substackcdn.com/image/fetch/$s_!72j3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 1272w, https://substackcdn.com/image/fetch/$s_!72j3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca2e200-9d23-4277-90f3-5437bdfa9e38_531x197.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The agent configured the pin monitor and measured the square wave&#8217;s frequency for about 5 seconds, which was expected. What I didn&#8217;t expect was that the agent also wrote a special test script to ingest the MCP server&#8217;s dataset and analyze the edge events to derive a frequency. Very clever.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xiMX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xiMX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 424w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 848w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 1272w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xiMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic" width="535" height="571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:571,&quot;width&quot;:535,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36888,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.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_!xiMX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 424w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 848w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.heic 1272w, https://substackcdn.com/image/fetch/$s_!xiMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7357488-6153-4b9a-aaf4-b0fc4c7cbb9e_535x571.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 agent fed the output of the script into the chat window. The wording of this output is a little strange. It looks like it swapped the &#8216;measured frequency&#8217; and &#8216;difference&#8217; metrics, but it still came to the correct conclusion: the output was close to 4 Hz, but could use some fine tuning in the DUT&#8217;s sketch could get the output even closer to 4 Hz.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4k2h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4k2h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 424w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 848w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 1272w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4k2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic" width="539" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:539,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73361,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.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_!4k2h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 424w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 848w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.heic 1272w, https://substackcdn.com/image/fetch/$s_!4k2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb725f070-a2bf-4b07-a66f-56f24a7f8a09_539x808.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8yiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8yiT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 424w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 848w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 1272w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8yiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic" width="493" height="542" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:542,&quot;width&quot;:493,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33000,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.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_!8yiT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 424w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 848w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.heic 1272w, https://substackcdn.com/image/fetch/$s_!8yiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F765fbe93-2007-464a-b68c-6f408807a61d_493x542.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QAr0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QAr0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 424w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 848w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 1272w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QAr0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic" width="532" height="525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:532,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41416,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.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_!QAr0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 424w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 848w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.heic 1272w, https://substackcdn.com/image/fetch/$s_!QAr0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5207fa4a-a647-4679-a859-fc2b3e2cce87_532x525.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>After editing the sketch using insights gained from the pin monitor, the agent was able to tune the frequency to within 0.1% of 4Hz.</p><p><em>Side note: obviously there&#8217;s a flaw in this system: the pin monitor&#8217;s clock source is not running at a frequency that wouldn&#8217;t provide precision beyond ~+/-0.5%.</em></p><p>Here&#8217;s a helpful summary from the agent showing what this autonomous development cycle was able to accomplish:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0zPo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0zPo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 424w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 848w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 1272w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0zPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic" width="542" height="488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:488,&quot;width&quot;:542,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43862,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.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_!0zPo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 424w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 848w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.heic 1272w, https://substackcdn.com/image/fetch/$s_!0zPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e7f8d0-15c0-4968-b2b1-fa8ff8987c47_542x488.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></p><h2>Code profiling</h2><p>Scenario: A developer needs to understand how long a function takes to execute to optimize system operation for latency, power, or another metric. This classic code profiling process uses pin toggling at the entrance and exit of a function to provide an externally measurable indication of execution time. For this test, I created a sketch with three simple functions that each block for a set period of time in a loop.</p><p>After a few test runs, I opened a new chat and instructed the agent to use the pin monitor to profile the sketch's three functions using a single pin. I had to specify that it could program the DUT multiple times to complete the task, but should revert the code back to its original state once testing was completed.</p><p>The agent methodically worked through the process, starting with FuncA() by adding a toggle at entrance and exit, then programming, running, and measuring. It continued with FuncB() and FuncC() without additional prompting, before presenting a timing chart. Impressively, the agent took an extra step in its findings by deriving an "expected" execution time based on the code and comments in the original sketch.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E1Y6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E1Y6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 424w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 848w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 1272w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E1Y6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic" width="544" height="868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:868,&quot;width&quot;:544,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69524,&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.switchingcontext.com/i/172356800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.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_!E1Y6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 424w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 848w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.heic 1272w, https://substackcdn.com/image/fetch/$s_!E1Y6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4446543-77d7-42c0-88cf-ab6c63694c76_544x868.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></p><h2>Proof of Concept Completed</h2><p>These development mock-ups hint at how logic analyzers, oscilloscopes, and other instruments with MCP server interfaces could become invaluable for runtime debugging with agents in real-world scenarios. I'm eager to see how industry leaders like Tektronix, NI, Agilent, Saleae, and others integrate their products into agent-driven workflows. There are already numerous examples of instruments with AI running onboard to help with configuration and testing. It's likely that the optimal solution here will involve coordination between powerful, autonomous coding agents and instrument agents.</p><p>This series, along with another post in Switching Context, has explored how LLM-driven agents extend beyond chat windows into both digital and physical realms. I've always been fascinated by building functionality at the intersection of analog and digital worlds. Microcontrollers exist precisely at this crossroad. While software engineers have "Hello World" as their introductory example to verify system functionality, embedded engineers have "blinky"&#8212;the simplest possible embedded system application where a few lines of code create a visible change in the physical world. This connection between code and physical world is precisely what makes agent-driven instrumentation during embedded system debug so promising. It extends the capabilities of AI beyond text generation into tangible, measurable interactions with real-world systems.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[MCP for debug instruments, part 2]]></title><description><![CDATA[Integrating a PoC pin monitor MCP server for code profiling in Cursor]]></description><link>https://www.switchingcontext.com/p/mcp-for-debug-instruments-part-2</link><guid isPermaLink="false">https://www.switchingcontext.com/p/mcp-for-debug-instruments-part-2</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 23 Aug 2025 14:42:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!snTs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://parkerdorris725439.substack.com/p/mcp-for-debug-instruments">first post</a> in this series, I created a simple pin monitor Model Context Protocol (MCP) server. Quick reminder: MCP servers provide a standardized way for AI coding agents to access documentation and tools. My first post mentioned that the next step would be using the proof-of-concept pin monitoring MCP server for rudimentary, mocked-up debugging in Cursor. However, I decided to change course. I thought of a different use case that could be more useful, assuming I can get it to work.</p><p>I want to get Cursor to use this pin monitor MCP server for code profiling.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.switchingcontext.com/subscribe?"><span>Subscribe now</span></a></p><p></p><h2>Code profiling: handy if you&#8217;ve got the pins and a way to monitor them</h2><p>Code profiling is a broad topic so let me narrow the scope. For this proof of concept, I&#8217;m referring to a technique where the developer toggles port pin states through lines of code strategically placed in the firmware project. A toggling port pin becomes a signal. It&#8217;s a fairly low tech, barely-intrusive way of determining the runtime state of a system.</p><p>For instance, if a port pin toggles to logic high when I enter an interrupt service routine, and toggles back to logic low when I exit, I've created a signal that reveals when that routine is executing. Using an oscilloscope or logic analyzer, I can then determine how frequently the interrupt occurs, how long it takes to execute, and other information.</p><p>Remember that my goal is to insert an AI agent into the virtuous development cycle. Specifically, I want to see if I can <em>get Cursor's AI agent</em> to use the simple pin monitor MCP server I created in my &lt;last post&gt; for profiling. I'm envisioning giving Cursor straightforward prompts like:</p><ul><li><p>"Profile all functions in this file and give me execution times for each"</p></li><li><p>"Tell me with what frequency this interrupt executes"</p></li></ul><p>Are AI agents clever enough to receive a prompt like that and know what to do through tools to accomplish the task? Think about the logic leaps it has to make:</p><ol><li><p>The agent has to understand that I&#8217;m asking for code profiling, and understand that the tool it has available to accomplish this task is the Edge detector MCP server</p></li><li><p>The agent <em>also</em> has to recognize that in order for the pin monitor to work, it needs to add pin toggling to the function being profiled <em>and then</em> program an Arduino with this modified code</p></li></ol><h2>Wait&#8230;Cursor has to program an Arduino board?</h2><p>Yes. The first step of code profiling is identifying strategic locations within a function to add pin toggles, creating meaningful external signals you can monitor. This task should be straightforward for the agent. While I'm uncertain whether the agent understands the concept of code profiling, if it does, adding pin toggling code should be simple.</p><p>Then, it gets tricky. The agent needs to actually program the Arduino. Here&#8217;s another instance where the agent must reach into the physical world.</p><p>Potentially this sounds like a job for another MCP server, this one for Arduino board programming.</p><p>Fortunately, Arduino provides a useful starting point: a command line interface (CLI) programming tool. This tool can compile and upload sketches to Arduino boards, essentially providing the same functionality as their Cloud IDE.</p><p>Although there's no official Arduino CLI MCP server, several developers have created their own versions. I found one, cloned the repo, and that's when the struggle began.</p><p>I discovered the "MCP tools" menu in Cursor's settings, which requires a JSON-formatted description of the tool. I had no idea how to format this information correctly, but ChatGPT did. After a few iterations with ChatGPT, I successfully got the MCP server up and running.</p><p>After the agent began to understand how to make use of the the Arduino CLI MCP server&#8217;s exposed tools, it was able to compile a test sketch and run it on an Arduino with my natural language prompt in Cursor&#8217;s chat. Pretty cool!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!taZs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!taZs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 424w, https://substackcdn.com/image/fetch/$s_!taZs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 848w, https://substackcdn.com/image/fetch/$s_!taZs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 1272w, https://substackcdn.com/image/fetch/$s_!taZs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!taZs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic" width="1118" height="255" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:255,&quot;width&quot;:1118,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19517,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.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_!taZs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 424w, https://substackcdn.com/image/fetch/$s_!taZs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 848w, https://substackcdn.com/image/fetch/$s_!taZs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 1272w, https://substackcdn.com/image/fetch/$s_!taZs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d279a4-bc09-4b43-80d7-c168df99cad1_1118x255.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!snTs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!snTs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 424w, https://substackcdn.com/image/fetch/$s_!snTs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 848w, https://substackcdn.com/image/fetch/$s_!snTs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 1272w, https://substackcdn.com/image/fetch/$s_!snTs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!snTs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic" width="1090" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1090,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25818,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.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_!snTs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 424w, https://substackcdn.com/image/fetch/$s_!snTs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 848w, https://substackcdn.com/image/fetch/$s_!snTs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.heic 1272w, https://substackcdn.com/image/fetch/$s_!snTs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd91223d1-ec3f-4f1c-9235-a65da4a1421a_1090x578.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iODz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iODz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 424w, https://substackcdn.com/image/fetch/$s_!iODz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 848w, https://substackcdn.com/image/fetch/$s_!iODz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 1272w, https://substackcdn.com/image/fetch/$s_!iODz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iODz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic" width="1077" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1077,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29508,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.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_!iODz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 424w, https://substackcdn.com/image/fetch/$s_!iODz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 848w, https://substackcdn.com/image/fetch/$s_!iODz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.heic 1272w, https://substackcdn.com/image/fetch/$s_!iODz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8babe6-3c59-450f-a71a-850f60a14293_1077x576.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></p><h2>Hardware setup</h2><p>I want to pause here and make clear that the board I just programmed is a different Arduino board than the one I&#8217;m using to emulate a pin monitor.</p><p>Right now my setup looks as follows:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lAC_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lAC_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 424w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 848w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 1272w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lAC_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic" width="250" height="423.7637362637363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2468,&quot;width&quot;:1456,&quot;resizeWidth&quot;:250,&quot;bytes&quot;:72563,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.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_!lAC_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 424w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 848w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.heic 1272w, https://substackcdn.com/image/fetch/$s_!lAC_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fa240a9-54eb-4ee5-899d-a3cadfb230c1_2265x3840.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>From now on I&#8217;ll refer to the Arduinos as DUT or Pin Monitor.</p><h2>Modifications to my pin monitor MCP</h2><p>At the end of my last blog, the pin monitor MCP server enabled a client to read a pin&#8217;s logic state and subscribe to realtime pin transition updates. Unfortunately, Cursor can have issues with monitoring a stream of data through an MCP server. After working on the PRD for this with ChatGPT, it became clear that my simple pin monitor needed more smarts so that Cursor would be able to configure the pin monitor to autonomously capture events for a period of time and report back with a log of edge events.</p><p>This required changes both to the pin monitor&#8217;s python script as well as some minor updates to the Arduino sketch. The first phases of this project were spent with AI assist building out these new features and running tests at certain milestones. Cursor cranked out code at a breakneck pace, but unfortunately its test coverage turned out to be lacking!</p><h2>Integrating with Cursor</h2><p>integration into Cursor&#8217;s registered list of MCP servers was challenging. First of all, Cursor&#8217;s AI agent doesn&#8217;t seem to understand nearly as much about Cursor&#8217;s menu system and MCP server configuration as you might expect. This led to issues where the upgraded pin monitor&#8217;s MCP server tools were deeply mismatched from what Cursor expected.</p><p>The most glaring issue occurred when the agent coded upgrades targeting version 1.0 of an MCP server interface library. This created a significant problem since my Cursor installation used a newer, incompatible library version. To be fair, this wasn't entirely the AI agent's fault. I should have specified the version requirements in my PRD.</p><p>Figuring out how to make the MCP server script compatible with this new version of the MCP library proved to be a surprisingly difficult challenge for the AI agent. It made a few increasingly sweaty and desperate refactoring attempts before throwing up its (virtual) hands and starting to create a &#8216;simple MCP server that will work&#8217;, thus discarding all our previous work.</p><p>After halting that dead end, I pointed out to the agent that the <em>other</em> MCP server in this system, Arduino CLI MCP server, was working properly. Perhaps the agent could use that code as a reference. After examining the source code, the agent identified the necessary patterns and finally Cursor recognized all the tools exposed by the pin monitor MCP.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!19ps!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!19ps!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 424w, https://substackcdn.com/image/fetch/$s_!19ps!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 848w, https://substackcdn.com/image/fetch/$s_!19ps!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 1272w, https://substackcdn.com/image/fetch/$s_!19ps!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!19ps!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic" width="441" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00c318c8-282a-4145-885b-bae536f816e4_441x577.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:441,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39103,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.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_!19ps!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 424w, https://substackcdn.com/image/fetch/$s_!19ps!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 848w, https://substackcdn.com/image/fetch/$s_!19ps!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.heic 1272w, https://substackcdn.com/image/fetch/$s_!19ps!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c318c8-282a-4145-885b-bae536f816e4_441x577.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></p><h2>But can Cursor actually <em>do</em> anything with my server?</h2><p>Now that all the tools of the MCP server seemed to be recognized, I expected smooth sailing, but that wasn't the case. None of the newly enumerated tools functioned properly. Despite trying various commands to monitor the port pins, nothing worked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!42rL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!42rL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 424w, https://substackcdn.com/image/fetch/$s_!42rL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 848w, https://substackcdn.com/image/fetch/$s_!42rL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 1272w, https://substackcdn.com/image/fetch/$s_!42rL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!42rL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic" width="1111" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1111,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45785,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.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_!42rL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 424w, https://substackcdn.com/image/fetch/$s_!42rL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 848w, https://substackcdn.com/image/fetch/$s_!42rL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.heic 1272w, https://substackcdn.com/image/fetch/$s_!42rL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87ab3c98-4b53-4dcb-86e3-9539a7356f86_1111x760.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="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kY12!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kY12!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 424w, https://substackcdn.com/image/fetch/$s_!kY12!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 848w, https://substackcdn.com/image/fetch/$s_!kY12!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 1272w, https://substackcdn.com/image/fetch/$s_!kY12!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kY12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic" width="1124" height="277" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:277,&quot;width&quot;:1124,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27105,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.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_!kY12!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 424w, https://substackcdn.com/image/fetch/$s_!kY12!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 848w, https://substackcdn.com/image/fetch/$s_!kY12!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 1272w, https://substackcdn.com/image/fetch/$s_!kY12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98fb449f-c594-4d3a-b387-3e18f5e1747c_1124x277.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ThQG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ThQG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 424w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 848w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 1272w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ThQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic" width="1145" height="738" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:738,&quot;width&quot;:1145,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89162,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.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_!ThQG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 424w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 848w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.heic 1272w, https://substackcdn.com/image/fetch/$s_!ThQG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d0c492-d340-4afc-8504-876709e3c023_1145x738.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>This was the point where my debug session entered a strange new phase. I asked the agent to review its own struggles with the MCP server alongside the MCP server source code itself. It was almost like I was asking the agent to take a time out and reflect on its actions.</p><p>This turned out to be an effective strategy. The agent identified a few issues in the MCP server python script and how it interfaced with the Arduino sketch. It even uncovered some bugs in the Arduino sketch itself. Apparently some state variables weren&#8217;t getting reset properly.</p><p>At the end of this self reflective prompting session, Cursor was able to build an MCP server with an Arduino board that the agent could successfully communicate with. The pin monitor worked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jSk1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jSk1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 424w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 848w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 1272w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jSk1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic" width="548" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:548,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33856,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.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_!jSk1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 424w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 848w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.heic 1272w, https://substackcdn.com/image/fetch/$s_!jSk1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dbbfa69-c862-4b84-8e1e-3e66b9b909db_548x531.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="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xnAW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xnAW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 424w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 848w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 1272w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xnAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic" width="524" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:524,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51944,&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.switchingcontext.com/i/171742578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.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_!xnAW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 424w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 848w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.heic 1272w, https://substackcdn.com/image/fetch/$s_!xnAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4d05287-d797-41e4-9a8d-446b6ec84591_524x516.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></p><h2>Okay, so <em>now</em> does this PoC <em>prove</em> the <em>concept</em>?</h2><p>Not quite! Although I believe the pin monitor MCP server is functional, and Cursor AI agent can finally understand how to talk to it, I still haven&#8217;t put all the pieces together: I haven&#8217;t asked Cursor one of those natural language code profiling prompts. In the next post in this series, I&#8217;ll try that.</p><p>Even at this point, it's becoming clear that AI agents with access to bench instruments and debug tools will transform the debugging and development process. Currently, AI coding agents excel at reliably and relentlessly fixing <strong>compile time </strong>bugs. Giving these agents access to bench instruments may enable them to become equally proficient at fixing <strong>runtime </strong>bugs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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><item><title><![CDATA[MCP For Debug Instruments]]></title><description><![CDATA[First steps experimenting with connecting AI to tools]]></description><link>https://www.switchingcontext.com/p/mcp-for-debug-instruments</link><guid isPermaLink="false">https://www.switchingcontext.com/p/mcp-for-debug-instruments</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 16 Aug 2025 19:58:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fc4e026e-afba-45a2-9630-d1462874f5e7_3840x845.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Standard disclaimer I&#8217;ll always add to posts that discuss embedded systems: opinions in this article are my own and don&#8217;t represent the opinions of my employer.</em></p><h3>The Virtuous Cycle of Embedded Code Development</h3><p>AI code assistance is just beginning to transform embedded code development. The slower adoption pace compared to other software development fields highlights a key difference between embedded systems development in constrained environments and development elsewhere in the industry. To put it possibly too simply: embedded systems devs are too close to the metal for AI.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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>Unlike mainstream software development that sits comfortably atop layers of abstraction that hides processor and physical layer complexities, embedded systems engineers must intimately understand their hardware's limitations. These systems directly interface with reality, converting analog signals with ADCs, controlling motors, managing RF communications, and countless other physical interactions, all while juggling tight memory budgets and CPU constraints. Moreover, these codebases often need to comply with rigorous communications protocols, safety certifications, and industry standards that leave little room for error.</p><p>Embedded systems developers navigate these constraints by employing a superset of the standard debug practices all developers use. While they hit breakpoints, monitor build artifacts, and watch terminal output, those working with real hardware inevitably also use specialized instruments like logic analyzers, spectrum analyzers, and oscilloscopes. The development cycle becomes a virtuous cycle of code development:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Dkf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Dkf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 424w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 848w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 1272w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Dkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic" width="1456" height="320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:320,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27518,&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.switchingcontext.com/i/171151002?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.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_!2Dkf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 424w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 848w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 1272w, https://substackcdn.com/image/fetch/$s_!2Dkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd332519c-3354-4dc2-8e7b-f951584152b3_3840x845.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Not shown: the frustration, despair, and coffee breaks between &#8216;Observe&#8217; and &#8216;code&#8217;</figcaption></figure></div><p>Current AI assistance can support most of these steps, but significant gaps remain in the 'observe' step when instrumentation is required.</p><p>The &#8216;closer to metal&#8216; developers get, the more important instrumentation becomes. Consider someone coding a wireless radio stack that must comply with a standard like Bluetooth. In these specialized domains, the relationship isn't "human in the loop" but rather "machine in the loop," where developers strategically incorporate AI code assistance. Attempting to code physical and link layer functionality for Bluetooth compliance without a spectrum analyzer will burn mountains of tokens without the code ever coming close to standards compliance.</p><p>So how might AI code assist gain access to bench instruments and complete that virtuous cycle? I think the most likely path this evolution takes is that LLMs interface with instruments through Model Context Protocol (MCP).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h5a-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h5a-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 424w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 848w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 1272w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h5a-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic" width="250" height="310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14547,&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.switchingcontext.com/i/171151002?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.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_!h5a-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 424w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 848w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.heic 1272w, https://substackcdn.com/image/fetch/$s_!h5a-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2697c27-9a11-4ce6-9641-1f0ccc16cad4_250x310.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><figcaption class="image-caption">Maybe MCP could have helped with these tools too. credit: Gary Larson</figcaption></figure></div><h3>MCP as LLM&#8217;s eyes and ears</h3><p>Anthropic&#8217;s release of the MCP spec in November 2024 (<a href="https://www.anthropic.com/news/model-context-protocol">https://www.anthropic.com/news/model-context-protocol</a>) proved to be a watershed moment in AI for code development. It&#8217;s been less than a year since Anthropic released this standard to the world, and yet MCP already feels like an integral component of AI-based coding.</p><p>Sidenote: everything with AI happens at a breakneck pace, even standardization. I&#8217;m used to standardization taking years, with brilliant people in meetings for months arguing about the placement of commas in standards documents. Not so with AI.</p><p>MCP follows a client/server architecture where the server provides primitives that clients can utilize. These primitives include tools, resources, and prompts as defined by the standard. Through standardized initialization and capabilities expression, MCP servers enable LLM-powered agents to clearly understand the available services and how to interact with them.</p><p>While most MCP servers I've seen focus on providing code, documentation, and datasets as resources, the 'tools' primitive type in the MCP standard offers a pathway to integrate bench instruments into embedded code development. Using this standard, an agent should be able to:</p><ul><li><p>Learn the measurement capabilities of a tool and its configuration options</p></li><li><p>Request measurements on demand</p></li><li><p>Configure the tool to monitor for asynchronous events and subscribe to updates</p></li></ul><p>Physical limitations still exist, of course. Logic analyzers need physical connections to port pins, spectrum analyzers must be wired into RF paths, and so on. But before exploring these constraints further, let me share what I built.</p><h2>Mocked-up MCP instrument build</h2><p>I wanted a simple proof of concept MCP server that functions as a bench instrument. Emphasis on &#8216;simple&#8217;: I built this mainly to understand how MCP servers operate, and how LLM-powered clients can interface with those servers.</p><p>The code is available at: <a href="https://github.com/parkerdorris/ArduinoButtonMonitorMCP/blob/master/button_monitor.ino">https://github.com/parkerdorris/ArduinoButtonMonitorMCP/blob/master/button_monitor.ino</a></p><p>I&#8217;ve included my initial PRD for the project for reference, though the project evolved as Cursor built and tested each component.</p><h4>Pin monitor</h4><p>I decided to use an Arduino board as a single GPIO pin monitor, with an MCP server wrapped around it. I chose Arduino because I wanted to ensure Cursor could generate embedded code in one attempt. For constrained devices, Arduino provides a clean, simplified hardware abstraction that makes it extremely easy for Cursor to generate functional embedded code.</p><p>The Arduino code exposes a few commands over a non-MCP compliant serial interface. Commands include:</p><ul><li><p>STATE, which returns the 0/1 digital state of the pin</p></li><li><p>SUBSCRIBE/UNSUBSCRIBE, which enables/disables pin monitoring events indicating "RISING" and "FALLING" edges of the pin</p></li></ul><p>Note that there's nothing MCP-specific about any of this. This is just a dead-simple Arduino sketch.</p><h4>MCP Server</h4><p>The MCP server is a Python script that manages the interface with the Arduino board. The MCP server python script contains a class that handles the Arduino connection and establishes a WebSocket interface compliant with MCP standards.</p><p>The MCP server implements these functions:</p><ul><li><p>Connect/disconnect from the tool</p></li><li><p>A method to retrieve button state</p></li><li><p>A method to subscribe to button edge events</p></li></ul><p>After a client subscribes to edge event detection, the server continuously streams edge events to that client.</p><h4>MCP Client</h4><p>The client script provides a system prompt to ChatGPT that instructs it to connect to the MCP server and narrate events. The terminal output is divided into two parts: the raw I/O communication between client and server, and ChatGPT's narration of those events.</p><p>Upon startup, the client establishes a WebSocket connection with the MCP server and queries the available tool capabilities.</p><p>Snippet:</p><p><code>main - INFO - Available tools: {'tools': [{'name': 'get_button_state', 'description': 'Get the current state of the button (0 or 1)', 'inputSchema': {'type': 'object', 'properties': {}, 'required': []}}, {'name': 'subscribe_button_edges', 'description': 'Subscribe to button edge events (RISING/FALLING)', 'inputSchema': {'type': 'object', 'properties': {}, 'required': []}}, {'name': 'connect_arduino', 'description': &#8230;</code></p><p>The code then checks the button state and subscribes to events.</p><p>When an edge detection event is sent from the server, the client echoes the websocket information. The LLM then provides brief 'narration' that assesses the button state within the runtime context.</p><p><code>&#128225; [MCP] Received button event: RISING at 13:03:51.522</code></p><p><code>State: 1 | Description: Button rising</code></p><p><code>2025-08-16 13:03:52,175 - httpx - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"</code></p><p><code>&#129302; At 13:03:51, the button was pressed, changing its state to active.</code></p><h2>Does this PoC actually 'P' the 'C'?</h2><p>To answer my own question: not really. While wrapping an MCP server around an instrument works, and I can set an LLM to studiously monitor and narrate the life of a port pin, I'm still a long way from understanding exactly how that virtuous development cycle can be completed with MCP-enabled bench tools.</p><p>For my next step, I plan to create a more realistic developer workspace. I'll connect this pin monitor to a second Arduino functioning as a device under test (DUT). I want to explore whether Cursor/VS Code can interface with the pin monitor as an MCP client (this seems feasible, though I need to conduct more research).</p><p>With this mock environment in place, I'll develop an intentionally buggy Arduino sketch for the DUT and leverage both Cursor and the MCP server to debug and fix the issues. Following that, I'll explore creating more practical MCP servers for actual instruments, possibly developing a proof-of-concept that wraps the PyVISA library. The experiment should be illuminating&#8212;potentially exciting, potentially frustrating, likely both!</p><p>Given that embedded systems development is inherently resource-constrained and tethered to real-world physical interactions, I believe this domain will remain human-in-the-loop longer than most software development fields. Through these experiments, I'm attempting to envision what human-AI collaborative embedded development might look like in 5-10 years.</p><p>Human/AI collaboration in the virtuous loop will undoubtedly remain essential for embedded systems, even as an increasing portion of the human contribution may shift toward more menial tasks like AI requests to "connect your scope to GPIO 3" or "don't forget to ground your probes."</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Zmj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Zmj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 424w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 848w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 1272w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Zmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png" width="1000" height="455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:320418,&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.switchingcontext.com/i/171151002?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.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_!9Zmj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 424w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 848w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.png 1272w, https://substackcdn.com/image/fetch/$s_!9Zmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9fef24a-a975-4e09-b39d-533feb38a87d_1000x455.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">&#8220;Please attach a probe to the UART TX pin, Dave.&#8221;</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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[Agent Mode For UX Testing?]]></title><description><![CDATA[Agent Mode failed at my game but succeeded at breaking my interface.]]></description><link>https://www.switchingcontext.com/p/agent-mode-for-ux-testing</link><guid isPermaLink="false">https://www.switchingcontext.com/p/agent-mode-for-ux-testing</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 09 Aug 2025 19:57:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e_An!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Tedium of Testing</h2><p>I&#8217;ve had a few jobs where product testing was part of my responsibilities. I've spent days meticulously following test plans&#8212;checking if bits in bytes were writable, confirming that setting a register to a specific value caused a peripheral to respond according to the datasheet, and more. One job I had was testing software installers, where I had to verify that every radio button functioned correctly and each cancel button truly aborted the intended action.</p><p><em>Click. Click. &lt;check a box on test plan&gt;. Click. Click. Click. &lt;check another box on test plan&gt;.</em></p><p>The rush I felt when I finally found a legitimate bug was incredible.</p><p>Eventually, I became the one writing test plans. Plot twist: creating the plans was just as monotonous as running them, but carried more stress since I now bore responsibility for defining test coverage.</p><p>As I&#8217;m typing this, AI tools are busily revolutionizing QA testing on code, as much as it&#8217;s revolutionizing code development itself. When I&#8217;m working on projects using AI assist, generating helpful test scripts is painless, though I have run into some issues.</p><p>When I was working on my first project, which I wrote about at the link below, I spent a lot of my time fiddling with the user interface. It was definitely more exciting testing my little web game than it was testing an installer, but still it was repetitive. I couldn&#8217;t think of a viable way to have AI test my interface autonomously.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8d2aa2cc-b7e7-4ed2-8a9d-5a2d0632c17a&quot;,&quot;caption&quot;:&quot;How it started vs. how it&#8217;s going&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Agents of Change&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:106286209,&quot;name&quot;:&quot;Parker Dorris&quot;,&quot;bio&quot;:&quot;Engineer and product manager writing about AI, embedded systems, and what I&#8217;m building.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-02T04:39:19.242Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Ksmz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://substack.com/home/post/p-169898125&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:169898125,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Switching Context&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!eK0m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7157a5cf-a7ed-4eaf-afea-82e1bc606200_1206x1206.jpeg&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p> </p><h2>Enter Agent Mode</h2><p>I've been excited to try Agent Mode in ChatGPT since its announcement, though my reluctance to let it make purchases on my behalf severely limits what I can do with it. I know we're heading toward a future where LLM reliability approaches "trust with my credit score" levels, but I'm not there yet.</p><p>A Reddit post about using Agent Mode to play a web app game sparked an idea I felt comfortable trying. The multimodal toolset powering Agent Mode enables users to prompt the system to navigate websites, figure out how to move around, and scroll, click, and type its way through tasks until completion. What if someone asked ChatGPT to run user interface tests on a website?</p><p>Yes, I know automated UI testing exists, and many of these frameworks are impressive. Most of these tools offer pixel-perfect control of test steps&#8212;the finest granularity possible. For this experiment, though, I wanted to take an intentionally na&#239;ve approach: simply point an AI at an interface with limited training and set it loose to perform a task.</p><p>The hype around Agent Mode suggests it's extremely capable. Demos show it buying wedding outfits across multiple websites and completing other complex, multi-step tasks. If Agent Mode is so smart, surely it can figure out how to use my silly little web game, right?</p><h2>Testing Round 1</h2><p>In retrospect, my first test prompt could have been a little bit more na&#239;ve. Given the information that I provided, the agent got off to a strong start, successfully clicking &#8216;Play Game&#8217;. Unfortunately, this was basically the last point in this test where the agent seemed to figure out what to do, and that might have been mostly driven by my too helpful prompt.</p><p>Sidenote, i appreciate the window into the virtual machine, but I love the stream of thought text boxes that appear above the agent&#8217;s cursor. As with a lot of functionality in Agent Mode, this feedback evokes a similar view into the stream of thought in &#8216;deep research&#8217; mode responses.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e_An!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e_An!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 424w, https://substackcdn.com/image/fetch/$s_!e_An!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 848w, https://substackcdn.com/image/fetch/$s_!e_An!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 1272w, https://substackcdn.com/image/fetch/$s_!e_An!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e_An!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic" width="1401" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1401,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86830,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.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_!e_An!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 424w, https://substackcdn.com/image/fetch/$s_!e_An!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 848w, https://substackcdn.com/image/fetch/$s_!e_An!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.heic 1272w, https://substackcdn.com/image/fetch/$s_!e_An!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f931f81-05cc-4e83-9805-313e402432a5_1401x1079.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></p><p>The agent could not get the &#8216;card flip&#8217; control to work at all. What I thought was a simple user interface completely flummoxed the agent. I watched it sputter around for 9 minutes, trying different UI patterns that it was guessing might be supported. It seemed to miss the guidance on screen, or was unable to interpret it correctly. After 9 minutes, it basically gave up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rx9t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rx9t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 424w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 848w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 1272w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rx9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic" width="522" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:522,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27704,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.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_!rx9t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 424w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 848w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.heic 1272w, https://substackcdn.com/image/fetch/$s_!rx9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea4e8c1f-7a43-43e5-8760-64c1ed3b9bfe_522x485.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></p><p>Being an obsessive problem-solving engineer in its recurrent heart, the agent tried taking the site apart in an attempt to figure out how the input controls worked.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!knIb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!knIb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 424w, https://substackcdn.com/image/fetch/$s_!knIb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 848w, https://substackcdn.com/image/fetch/$s_!knIb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 1272w, https://substackcdn.com/image/fetch/$s_!knIb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!knIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic" width="1255" height="773" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:773,&quot;width&quot;:1255,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83325,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.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_!knIb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 424w, https://substackcdn.com/image/fetch/$s_!knIb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 848w, https://substackcdn.com/image/fetch/$s_!knIb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.heic 1272w, https://substackcdn.com/image/fetch/$s_!knIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec1ef9a-1e60-4ebc-8259-da16e7493819_1255x773.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></p><p>Watching the agent try and fail again and again, reading its increasingly frenzied attempts to get the site to do anything correctly, was an emotional experience. I found myself rooting for the agent to finally figure out how to swipe.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tAan!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tAan!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 424w, https://substackcdn.com/image/fetch/$s_!tAan!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 848w, https://substackcdn.com/image/fetch/$s_!tAan!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 1272w, https://substackcdn.com/image/fetch/$s_!tAan!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tAan!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic" width="789" height="599" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:599,&quot;width&quot;:789,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35359,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.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_!tAan!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 424w, https://substackcdn.com/image/fetch/$s_!tAan!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 848w, https://substackcdn.com/image/fetch/$s_!tAan!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.heic 1272w, https://substackcdn.com/image/fetch/$s_!tAan!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f05bcc0-1db1-4d6d-a8eb-29a6682ea913_789x599.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></p><p>By the end of this round, I had fully fallen into the role of &#8216;square hole girl&#8217; in her brilliant, viral post from years ago:</p><div id="youtube2-cUbIkNUFs-4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;cUbIkNUFs-4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/cUbIkNUFs-4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>I tried telling myself that whatever just happened was a limitation of the virtual machine. It can click, but maybe it can't swipe? In the documentation I've read, OpenAI doesn't provide details about the browser type used in Agent Mode or its supported features. That said, my game uses a React interface, part of my tech stack that's universally supported in modern browsers.</p><p>I had to admit that my web game was likely partially at fault for not offering failsafe fallback input controls.</p><h2>Testing round 2</h2><p>I noticed that the agent spent a lot of its time trying to use key strokes to advance the game, so I prompted Cursor to add keystroke support. Arrows to flip the cards and enter key for selection and screen navigation. This was a simple addition to the web app&#8216;s UI that Cursor built into the project without any issues.</p><p>I tested the addition and immediately saw that this had been a missing feature all along. The interaction was a smooth and natural alternate control interface that should have been there at the start.</p><p>During the second round of testing, the agent still struggled with the interface. Strangely, this time the agent never attempted to use keystrokes and instead pawed and scraped around the site, failing to make much progress. At one point it seemed to go down a rabbit hole of trying to use a right click to make the game work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xa7r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xa7r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 424w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 848w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 1272w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xa7r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic" width="1045" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1045,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45167,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.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_!xa7r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 424w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 848w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.heic 1272w, https://substackcdn.com/image/fetch/$s_!xa7r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35d7ffd5-1a53-4f20-989f-0deda82e8f2d_1045x804.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></p><p>It became clear at this point that what I was really using Agent Mode for was as a beta tester for my game. I was essentially watching over the agent's digital shoulder as it completely failed to enjoy playing my game.</p><p>Others reading this probably had this realization much sooner, so please forgive me!</p><p>With this "beta tester" idea in mind, I asked ChatGPT for feedback. It gave me several suggestions, including creating a one-time tooltip with instructions that would appear on screen. It even helpfully provided starter text for the tooltip.</p><p>I dropped the markdown file containing the tooltip text into my project and asked Cursor to review and plan for implementation. Cursor, with its deeper knowledge of the project than ChatGPT had, suggested two tooltip variants&#8212;one for desktop and one for mobile. After a few iterations to refine the tooltip's appearance, I was satisfied with the result and pushed to origin. Vercel deployed the new version of the site, and I returned to ChatGPT.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G2mN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G2mN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 424w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 848w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 1272w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G2mN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic" width="1037" height="1249" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1249,&quot;width&quot;:1037,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53855,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.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_!G2mN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 424w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 848w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.heic 1272w, https://substackcdn.com/image/fetch/$s_!G2mN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2fc6bc4-0127-4571-92b6-1348af85f99c_1037x1249.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>In my last blog I mentioned how iterative meta prompting seemed very &#8220;help me help you.&#8221; This experience of ChatGPT recommending tooltips to help Agent Mode navigate my game felt like the opposite side of that coin, with ChatGPT explaining how I could help it help me build a decent interface.</p><h2>Testing round 3</h2><p>I started a new chat in ChatGPT and prompted it to perform the test again. I started a new chat because I wanted the agent to start clean &#8212; to be a new user. With the tooltip showing up on screen in the agent&#8217;s virtual machine window, I had high hopes for this round of testing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qOAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qOAb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 424w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 848w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 1272w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qOAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic" width="1036" height="782" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:782,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28812,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.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_!qOAb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 424w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 848w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.heic 1272w, https://substackcdn.com/image/fetch/$s_!qOAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c58909b-baac-4fad-b1ed-5873487b374a_1036x782.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></p><p>Then something amazing happened: the agent actually started playing the game.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!weMr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!weMr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 424w, https://substackcdn.com/image/fetch/$s_!weMr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 848w, https://substackcdn.com/image/fetch/$s_!weMr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 1272w, https://substackcdn.com/image/fetch/$s_!weMr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!weMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic" width="1037" height="860" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1037,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33267,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.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_!weMr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 424w, https://substackcdn.com/image/fetch/$s_!weMr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 848w, https://substackcdn.com/image/fetch/$s_!weMr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.heic 1272w, https://substackcdn.com/image/fetch/$s_!weMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d2b7ed9-b99e-40dc-aff3-917cac5bbdde_1037x860.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></p><p>Turns out the agent is not great at identifying AI-generated images, even though it seems to have ideas about AI generated image &#8216;tells&#8217; like unusual symmetry:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qp3N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qp3N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 424w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 848w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qp3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic" width="1097" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/babcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:1097,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36357,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.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_!Qp3N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 424w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 848w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qp3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabcda53-d37c-4964-b7b2-d4794baafd78_1097x871.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></p><p>Seriously, the agent was bad at this game:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xjhw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xjhw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 424w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 848w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 1272w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xjhw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic" width="1043" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1043,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37221,&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.switchingcontext.com/i/170556015?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.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_!xjhw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 424w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 848w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.heic 1272w, https://substackcdn.com/image/fetch/$s_!xjhw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89a461df-14b2-4a64-bd8f-590c67e0f1f7_1043x794.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></p><p>Out of five rounds of play, the agent would only choose the AI generated image correctly one or two times.</p><h2>Final Feedback from the Beta Tester</h2><p>For me, the real value of this test was recognizing that Agent mode could function as a beta tester and provide actionable feedback. When I finished my final round of testing, I asked for a final assessment of the game. Was it <em>fun</em>?</p><p>Here's its assessment. ChatGPT&#8217;s choice of emoji says it all!</p><div><hr></div><h3>&#128528; <strong>Enjoyment</strong></h3><p><strong>Strengths</strong>:</p><ul><li><p>Quick, low-friction play: no account, no login, just straight into the game.</p></li><li><p>Each round takes a few seconds, making it bingeable.</p></li></ul><p><strong>Weaknesses</strong>:</p><ul><li><p>No real sense of progression, story, or stakes.</p></li><li><p>No contextual feedback or visual reward for success.</p></li><li><p>Without explanations, it feels more like guessing than learning.</p></li></ul><p><strong>Overall</strong>:</p><p>The game is <em>moderately enjoyable</em> for 5&#8211;10 rounds. It&#8217;s a great casual test of perception, but lacks the hooks (like streaks, leaderboards, rewards, or feedback) that would make it sticky or viral.</p><div><hr></div><p>&#8220;Moderately enjoyable.&#8221; Tough but fair, though I think it&#8217;s funny that the chat chose to italicize moderately enjoyable. That&#8217;s not something I added for emphasis. Is ChatGPT learning how to be sarcastic?</p><h2>Next steps</h2><p>Though this experiment was basic, it reveals several promising applications for Agent Mode in ChatGPT:</p><ul><li><p>The agent's experience seamlessly feeds back into the chat, allowing for post-mortem discussions about UX issues.</p></li><li><p>ChatGPT not only identifies problems but also provides specific coding solutions to fix the issues it encounters.</p></li><li><p>The logical next evolution would remove me from the process entirely, enabling automated UX testing directly within code assist tools like Cursor.</p></li></ul><p>It remains unclear, however, if OpenAI intended Agent Mode to be used for this purpose. Between my second and third test rounds, my access to Agent Mode disappeared for at least 24 hours&#8212;possibly due to usage limits, but perhaps not.</p><p>Until I get more definitive information, I'll continue using Agent Mode to test my projects. Watching it struggle with my interface taught me valuable lessons, and its frustrated comments highlighted genuine problems I had overlooked.</p><p>I'm certain that major GUI testing vendors will eventually create tools with interfaces similar to what I improvised with ChatGPT&#8212;offering more detailed control, better visibility, and more actionable insights. But for a quick UX reality check on whether a feature makes intuitive sense, why not run it through Agent Mode and ask for feedback?</p><h2>But what does it all really mean</h2><p>While it was exciting and even stressful to watch the agent attempt to play my web game, I noticed that I was feeling something else as well. The experience was unnerving in a way that I had trouble understanding at first. Eventually I figured out that my uneasiness stemmed from the realtime nature of the agent mode window. I first felt a hint of this when Deep Research mode was released and we could see a sidebar with a point-by-point "chain of thought" driving the analysis. But that stream of thought still felt interior to the LLM. Agent mode, however, is the LLM venturing out into the (digital) real world.</p><p>I know that agentic tools operating keyboards and mice to navigate the web fails to meet any definition of &#8216;embodied&#8217; AI, but it doesn&#8217;t feel quite as &#8216;disembodied&#8217; as before. Just a few days back, <a href="https://futurism.com/chatgpt-agent-captcha">someone documented</a> seeing Agent Mode encountering an "Are you a robot?" captcha and clicking "no".</p><p>The AIs are here with us on the web, <em>right now</em>, struggling with unintuitive interfaces, flailing around and madly clicking on unresponsive controls, alongside the rest of us.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! Subscribe for free to receive new posts.</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><item><title><![CDATA[Agents of Change]]></title><description><![CDATA[First post, first project]]></description><link>https://www.switchingcontext.com/p/agents-of-change</link><guid isPermaLink="false">https://www.switchingcontext.com/p/agents-of-change</guid><dc:creator><![CDATA[Parker Dorris]]></dc:creator><pubDate>Sat, 02 Aug 2025 04:39:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ksmz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.switchingcontext.com/subscribe?"><span>Subscribe now</span></a></p><h2>How it started vs. how it&#8217;s going</h2><p>I&#8217;ve dealt with AI's relentless, accelerating, and seemingly existential threat to my career in IoT with grace and composure. At least, that&#8217;s what I like to think. In hindsight, it&#8217;s clear that my evolving attitude these last few years followed five familiar stages:</p><ol><li><p><strong>Denial:</strong> &#8220;Oh wow, AI can write a dumb haiku about my cat? Not exactly HAL.&#8221;</p></li><li><p><strong>Anger:</strong> &#8220;Could there be a bigger waste of time than prompting an AI to tell me things I already know? I&#8217;m an expert!&#8221;</p></li><li><p><strong>Bargaining:</strong> &#8220;Fine, I&#8217;ll generate a deep research report using AI when my boss asks for it. Faster than doing it myself.&#8221;</p></li><li><p><strong>Depression:</strong> &#8220;I should have majored in Computer Science instead of Electrical Engineering. Maybe then I would have known what a perceptron was before it was too late.&#8221;</p></li><li><p><strong>Acceptance:</strong> &#8230;here we are</p></li></ol><p>The more I use AI&#8212;both at work as a product manager at a semiconductor company, and in my off-hours tinkering&#8212;the more intrigued I become. Is this hope I&#8217;m feeling? Or Stockholm syndrome?</p><p>Quick background: I&#8217;ve spent twenty years in IoT, nearly all of it at the same company. I started in applications engineering, moved into firmware, and eventually product management, focused on Bluetooth. I liked my job in the pre-AI world the way dinosaurs probably enjoyed sunny weather before the meteorite.</p><p>Now I&#8217;m writing a series about the projects I&#8217;m working on, what I&#8217;ve built, and what I&#8217;ve learned. I&#8217;ve <a href="https://www.silabs.com/blog/improving-accuracy-with-a-new-channel-sounding-dev-kit">written</a> <a href="https://www.nxp.com/company/about-nxp/smarter-world-blog/BL-UWB-AND-BLUETOOTH-LOW-ENERGY">a</a> <a href="https://www.planetanalog.com/technical-support-primer/">number</a> <a href="https://www.planetanalog.com/tackling-low-power-design-challenges-in-embedded-systems/">of</a> <a href="https://www.bluetooth.com/blog/silicon-labs-provides-an-in-depth-look-at-bluetooth-trends-we-can-expect-to-see-in-2024/">technical</a> <a href="https://www.bluetooth.com/blog/silicon-labs-provides-an-in-depth-look-at-bluetooth-trends-we-can-expect-to-see-in-2024/">articles</a>, but usually from a place of authority. That won&#8217;t be the case here. Like a lot of people reading this, I&#8217;m learning as I go. If this helps someone else push through their own stages of career grief&#8212;or at least feel less alone in the process&#8212;I&#8217;ll count that as a win.</p><h2>Spaghetti/Code</h2><p>I learn by building. I decided to work on a series of AI-centered projects guided by a few principles:</p><ul><li><p>The projects had to teach me something I didn&#8217;t already know about AI</p></li><li><p>I had to &#8216;ship it&#8217;, whether that meant launching a site or pushing to GitHub</p></li><li><p>Have fun</p></li></ul><p>When generative AI first went mainstream, I found comfort in how horrific the AI-generated images looked. Back in 2022-2023, Will Smith eating spaghetti looked like a scene from an abandoned Cronenberg film. These grotesque outputs from primitive models were reassuring precisely because they were so obviously artificial.</p><p>Now, of course, AI-generated images are much harder to identify. Noses typically appear in the right places and most subjects have the correct number of fingers and arms. Still, we're in an era where these images have certain tells. If you know what to look for, you can spot subtle inconsistencies in lighting, unnatural textures, or peculiar details that just feel wrong. For me, spotting what makes an AI image artificial has become a kind of game. I began wondering if I was better than my friends and family at identifying these AI markers. That's where I got my project idea.</p><p>Problem: I didn&#8217;t know how to code a website from scratch. I'm an embedded systems guy! I specialize in resource-constrained MCUs, writing machine code, counting cycles, and squeezing data into bits. Javascript is definitely not my native tongue.</p><h2>I would rather not call it &#8216;vibe coding&#8217;</h2><p>Before I even started coding the site, I bombarded ChatGPT with basic web development questions that needed expert answers. While I can&#8217;t imagine developing any kind of meaningful attachment to AI, it was liberating knowing that I had a judgement-free digital officemate who answered my "Website 101" questions without any eye-rolling.</p><p>One of the aspects of a website I understood the least about was how various components of a website were hosted, and how they interact with each other. Using ChatGPT as my patient guide, I settled on Vercel for my frontend running a React app written in TypeScript, Render as my Python-implemented backend exposing endpoints for image retrieval from a Supabase database and image store. For coding, I chose Cursor as my AI assistant.</p><p>All these sites were new to me, and without a doubt there are more cost effective platforms to launch sites from, but I went with these because the balance they struck between ease of use and technical visibility helped me learn.</p><p>After a few attempts at building with minimal prompts in Cursor that resulted in mangled, half-functional proof of concepts for site components, I learned I needed to be more disciplined. "Garbage in, Garbage Out&#8221; is a concept that's alive and well in this AI-prompted coding environment.</p><p>I discovered that my product management skills in creating Product Requirements Documents were useful, as AI coding tools respond well to PRDs as structured prompts. After researching "meta prompting" (essentially prompting about how to prompt), I fed my PRD into ChatGPT's canvas. The process felt like a "help me help you" exercise, but I was impressed by the results after a couple of iterations. Learning to communicate effectively with AI taught me several important lessons:</p><ul><li><p>Clear, unambiguous, and detailed descriptions is essential, but:</p></li><li><p>It&#8217;s also important not to hammer out every detail in your head; at least in my experience so far, too much detail can result in a kind of &#8216;overfitting&#8217; in the generated output</p></li><li><p>Use an AI-generated PRD template improves structure and drafting efficiency</p></li><li><p>Don't take it personally when meta prompting tears your own writing apart</p></li></ul><p>That last point was the hardest for me to learn.</p><p>When I felt like I had reached a point of diminishing returns with meta prompting, I added the PRD to my project directory. After instructing Cursor to review, it only asked a few questions before creating the project&#8217;s codebase step-by-step &#8212; literally &#8216;step by step&#8217;, because my PRD prescribed build phases that Cursor followed.</p><p>The code generation speed was overwhelming. Instead of watching the code fly by, I focused on Cursor's AI pane that summarized each file and function it created.</p><p>One of the first components I built was the title screen:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ksmz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ksmz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 424w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 848w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 1272w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ksmz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png" width="586" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:586,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:380266,&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.switchingcontext.com/i/169898125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.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_!Ksmz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 424w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 848w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.png 1272w, https://substackcdn.com/image/fetch/$s_!Ksmz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03cf3582-0835-435d-8009-3ca6883ea10a_586x808.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">Who needs subtlety?</figcaption></figure></div><p>While most components worked correctly, I struggled with the UI and game's state machine. I spent 90% of my time fine-tuning the core UI feature where players swipe to flip image pairs. This made some intuitive sense, because of the inherently human subjectivity of what I was fine tuning. Then again, maybe I should have spent a little more time on the PRD.</p><p>After a few hours of prompting and testing, I had a working React-based frontend with a Python-driven backend pulling dummy data from a database.</p><p>One more big problem: the game wouldn&#8217;t work without a sizable repo of images, and not just the handful of placeholder images I&#8217;d been working with so far.</p><p>I scoured the web for free photo repositories but hit a wall when it came to AI-generated images. Where would I find enough AI-generated content to create a game with meaningful variety?</p><p>The answer was obvious in retrospect. I'd have to create them myself.</p><h2>It&#8217;s AIs all the way down</h2><p>My knowledge of image generation matched my website coding expertise: near zero. I turned to ChatGPT with basic questions about finding image models and generating the thousands of images I needed.</p><p>Given that my desktop is a modestly equipped Mac mini, I had to take a crash course on server rental that lead me to runpod.io, where I could rent out powerful GPUs by the hour. On one of these pods, which were basically virtual machines, I could run Python scripts that launched ComfyUI, a node-based interface for building and executing image generation workflows.</p><p>The first time my script worked, and I opened up a png to find a (nearly) photorealistic middle-aged guy staring back at me. He had soulful eyes, a salt and pepper beard, and skin that looked as plastic as a Funko Pop. Perfect.</p><p>Next problem: each prompt generated one image, but I wanted thousands so that the game wouldn&#8217;t become immediately boring as images appeared repeatedly.</p><p>Living life on the edge without a proper PRD, I prompted Cursor to create a second project just for batch image generation. The script used ChatGPT to generate thousands of prompts that were then fed into the generative image model. Just to see what would happen, I also fed all the resulting image through another model to generate embeddings (multidimensional points in semantic space that &#8216;describe&#8217; the image in a way that&#8217;s searchable based on input prompt similarity&#8230;.just in case I ever wanted to add that feature to the game). AI generated a script that used AI to prompt and AI to generate images that were then characterized by AI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R_OI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R_OI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R_OI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg" width="382" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:382,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67973,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.switchingcontext.com/i/169898125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eff8b7-fa3d-4726-9eab-9606b6237387_1064x739.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R_OI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R_OI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd94c3c20-27f2-4852-b3ff-12cf86989aa6_382x575.jpeg 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">Slop.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UJeq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UJeq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 424w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 848w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 1272w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UJeq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png" width="331" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aab5733b-9656-4350-86bf-dde62efea6d6_331x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:331,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176267,&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.switchingcontext.com/i/169898125?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.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_!UJeq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 424w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 848w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.png 1272w, https://substackcdn.com/image/fetch/$s_!UJeq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab5733b-9656-4350-86bf-dde62efea6d6_331x524.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">Not slop.</figcaption></figure></div><p>I could have spent more time testing sophisticated generative image models beyond SD 1.5, but I deliberately chose not to. I wanted players to have a reasonable chance of scoring well.</p><p>After observing my friends and family identify AI-generated images from my repository with at most 90% accuracy, I believe my decision to avoid using leading-edge generative models was justified.</p><h2>What&#8217;s next?</h2><p>The game is live today at <a href="http://slopornah.com/">slopornah.com</a>. I could have launched faster, but got sidetracked learning about website security and Google Ad Sense. With those tangents factored in, what should have been a weekend project stretched to three weekends, though it would have taken years to learn and code everything myself.</p><p>The deeper I got into this project, the more my fears about AI's impact on my career faded. AI will certainly transform my day-to-day work in profound ways I&#8217;m only beginning to grasp. But I work in tech. Did I really expect tradition and security?</p><p>I remember older developers in the 90s reminiscing about their "good ol' days" with punch cards and basement mainframes. Their experience was as foreign to me then as coding without AI assistance will seem to future programmers.</p><p>As engineers, we are agents of change. We have a responsibility to innovate and ensure our innovations make the world better. Generative AI's transformative potential is both more dangerous and promising than any technological advance in decades. That's why it's crucial for all of us to take responsibility for AI. It&#8217;s up to all of us to harness this technology for positive change to create tools and products that make people happier, safer, and more prosperous.</p><p>We've evolved from punch cards to machine code to higher-level languages, building more, experimenting further, and occasionally creating technology that genuinely transforms lives. I'm excited about the innovation and efficiency that AI unlocks. Infinitely patient, impressively competent, and occasionally confounding, it's already helping me start my next project.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.switchingcontext.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 Switching Context! 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>