<?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[Nautilus]]></title><description><![CDATA[My personal inference on AI, productivity and gadgets.]]></description><link>https://www.nemofq.com</link><image><url>https://substackcdn.com/image/fetch/$s_!IhQs!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86a608c0-d43c-463c-9b49-e8be600e39fa_500x500.jpeg</url><title>Nautilus</title><link>https://www.nemofq.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 20 Sep 2026 08:21:55 GMT</lastBuildDate><atom:link href="https://www.nemofq.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Nemo Feng]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[nemofq@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[nemofq@substack.com]]></itunes:email><itunes:name><![CDATA[Nemo Feng]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nemo Feng]]></itunes:author><googleplay:owner><![CDATA[nemofq@substack.com]]></googleplay:owner><googleplay:email><![CDATA[nemofq@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nemo Feng]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Vertical Harness]]></title><description><![CDATA[What it takes to turn models into business outcomes.]]></description><link>https://www.nemofq.com/p/the-vertical-harness</link><guid isPermaLink="false">https://www.nemofq.com/p/the-vertical-harness</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Sat, 22 Aug 2026 15:42:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ODVO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>I. Will the harness disappear?</h2><p>The Claude Code team at Anthropic recently deleted over 80% of its system prompt for the newest models: rules and examples once needed to keep earlier models on track, gone with no measurable loss on evaluations.</p><p>The thing that shrank has a name: the harness, and if you have ever used an agent, you have used one. Everything outside the model is the harness: the loop, the tools, the memory, the prompts. It is what extends a model into an agent that completes real-world tasks. In one line:</p><p><strong>Agent = Model + Harness</strong></p><p>And the deletion is a pattern, not a one-off: the models keep getting stronger, and every release absorbs a piece of the harness that came before it. The conclusion seems obvious: keep this up and the harness disappears. So, will it?</p><p>My answer is no. What a stronger model does is not eliminate the harness but redraw its boundary at both ends: the boundary sits at whatever the model cannot yet do on its own, and the harness exists precisely to cover that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3SHj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3SHj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3SHj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.nemofq.com/i/210970750?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.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_!3SHj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!3SHj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4b7069-c32f-42b7-be15-dfe4bbec4e35_2400x1330.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>While models were absorbing instructions, the harness was growing capabilities of its own: memory, sub-agents, skills. Each time the model internalizes something, the harness reaches further out. The layer is not shrinking. It is moving outward, and it will keep doing that for as long as there are tasks a model cannot finish alone, which is to say, roughly, until AGI. I can accept that retirement date.</p><div><hr></div><h2>II. The vertical gap</h2><h3>From coding to knowledge work, the penetration was free</h3><p>Not long after I started using Claude Code, I noticed it was good at things that had nothing to do with code: research, reports, slides, maybe combining them all. So did the market. With hindsight the pioneer was Manus, which through careful harness work delivered a real jump in agent capability on much smaller models. In late 2025, OpenClaw and Hermes set off the personal-agent wave on a short ingredient list: IM channels as the interface, persistent memory, cron jobs, local files and tools. Then the labs productized it with Claude Cowork and Codex for Work; by Anthropic&#8217;s mid-2026 numbers, over 90% of Cowork sessions have nothing to do with software development.</p><p>Knowledge work did not need a brand-new harness, because from where the agent sits, the environment (what it can see, what it can do, and how anyone can tell whether it worked) barely changed. A research report, a spreadsheet analysis, a slide deck: the context still comes from local files, tools and skills plug in the same way (and some, web search above all, serve both kinds of work), and the output is a file a person can check on the spot, the same way code is checked. Much the same harness, in much the same environment, took on a different job; the step happened almost by itself.</p><h3>The next step, measured twice</h3><p>Everybody knows this intelligence will spread into real businesses in every industry. But when it comes to the harness for industry work, there is a contrast worth a look, from Artificial Analysis, measured on the same model and the same harness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c8Ov!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c8Ov!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c8Ov!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114025,&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.nemofq.com/i/210970750?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.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_!c8Ov!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!c8Ov!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febfd2a65-2bf9-434b-8e7a-069eb7201c3f_2400x1330.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><strong>The good: </strong>GDPval-AA v2, 220 tasks from 44 occupations across 9 major industries. Industry work, but simplified into the shape the harness grew up in: reference files in a sandbox, a deliverable out (a document, a spreadsheet, a slide deck), a judge reading it on the spot. Scored blind against human expert work anchored at 1,000 Elo, Claude Fable 5 reaches 1,738: by this measure, the model already does industry work better than the human expert.</p><p><strong>The bad: </strong>EnterpriseOps-Gym-AA, a ServiceNow Research benchmark, 1,150 tasks across 8 enterprise domains. Here the work stays where it actually lives: inside a live business system, operated through the system&#8217;s own tools, graded on the final state of the databases with no partial credit. Its authors frame it as testing what most evals skip: multi-step tasks, irreversible actions, success defined by policy. The best model here is the same Claude Fable 5, and the best score is a failing one: 51.1%.</p><p>Abstract the environment away, and the agent is above the human baseline. Put the environment back, and it finishes about half.</p><p>From the benchmark to the field, take product-listing automation in e-commerce. Generating the listings, titles, descriptions, images, and short videos included, is the part the model handles with ease. Getting the work done means publishing them to each storefront, and every storefront has its own format requirements and its own way in: one exposes an API, another an MCP server, a third only yields to browser use. Nothing about the model needs to change; everything around it does.</p><h3>Context, delivery, know-how, evaluation</h3><p>So why does a harness that crossed from coding to knowledge work so easily not cross into industries? Four reasons.</p><p><strong>Context.</strong> The current harness reads local files; the context of industry work lives in systems you do not own (CRM, EHR, ERP, POS). Reading them takes an MCP or API integration, a permission, and knowledge of the data itself: how it is structured, and where in those systems the right context sits.</p><p><strong>Delivery.</strong> The current harness writes files; finishing industry work means writing into those systems, and each call has consequences: the refund went out, the goods shipped, the message reached the customer. No undo, and the right to act belongs not to the agent but, for now, to a specific employee. A footnote from CRMArena-Pro, a benchmark from Salesforce: agents do not spontaneously protect sensitive information, and prompting them to do so raises refusals while lowering accuracy.</p><p><strong>Know-how.</strong> The current harness ships no sense of how this line of work is done well. Coding&#8217;s conventions were absorbed from millions of public repositories; an industry&#8217;s practice is written down nowhere: which checks in which order, which exceptions escalate. Without it the agent stumbles through the loop by trial, burning tokens and losing accuracy.</p><p><strong>Evaluation.</strong> The current harness assumes feedback comes right away. In coding it comes from the compiler and the test suite; in knowledge work, easily from a person reading the file. In an industry it may not come for weeks, and sometimes it only arrives as a customer complaining about a wrong bill.</p><p>In Part III, I give my own definition of the layer that puts these four back: the vertical harness.</p><div><hr></div><h2>III. What a vertical harness is</h2><h3>Three layers</h3><p>I picture the vertical harness as three layers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ODVO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ODVO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ODVO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115227,&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.nemofq.com/i/210970750?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.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_!ODVO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!ODVO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab250bf-22c2-49aa-a2a5-d2b1efbb384e_2400x1330.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><strong>The general layer.</strong> Everything today&#8217;s harness already is: the orchestration (loop, sub-agents, graphs), context management, memory, the mechanisms for skills and tools, model routing that lets the agent draw on different models for different tasks, scheduling (cron jobs), sandboxes, and the interface itself, a desktop app or an IM channel. This layer is largely the same from industry to industry.</p><p><strong>The industry layer.</strong> What every agent in one industry needs:</p><ul><li><p><strong>Domain knowledge</strong>: the rules, terminology, and data structures of the trade.</p></li><li><p><strong>Integration</strong>: the skills and MCP servers that interface with the industry&#8217;s existing systems.</p></li><li><p><strong>Access</strong>: identity and permissions, under whose authority the agent reads and writes.</p></li><li><p><strong>Eval</strong>: how good work is recognized, including the labeled data the industry has to annotate for itself.</p></li><li><p><strong>Audit</strong>: the trail the industry demands afterward.</p></li><li><p><strong>Interface</strong>, reappearing here as a variant embedded in the systems the industry already uses.</p></li></ul><p>These are Part II&#8217;s four gaps made into components, plus what the industry adds on top.</p><p><strong>Role packages.</strong> One per occupation, sitting on the industry layer. Each package carries:</p><ul><li><p><strong>Role knowledge</strong>: how this particular job is done well, the habits and best practices of the occupation.</p></li><li><p><strong>Role skills</strong>: the concrete routines of the role, encoded and executable.</p></li><li><p><strong>Collaboration</strong>: how the role hands work to, and takes work from, the roles around it, human or agent.</p></li><li><p><strong>Mini-eval</strong>: the role&#8217;s own definition of done.</p></li></ul><p>What goes where? Who shares it decides: what every agent needs sinks to the general layer, what every role in one industry needs sits in the middle, what only one occupation needs stays in its package. So knowledge, skills, and permissions appear at every layer, repeating in shape but not in content: a storefront&#8217;s listing rules are domain knowledge, because every role touches them; how to pace an ad budget through a holiday belongs to the media buyer alone.</p><p>Recent harness projects are already exploring along these seams. <a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness</a> makes everything a plugin, from tools and skills to the loop itself; that kind of flexibility makes assembling a vertical harness of your own much easier. <a href="https://github.com/cloudflare/cloudflare-os">Cloudflare OS</a> enhances the access and permission side: agents start with nothing, humans grant resources one by one, and credentials stay with a gatekeeper that logs every read.</p><h3>Two examples</h3><p>Take two verticals, legal and e-commerce, as examples.</p><p>A legal harness, in this structure: the industry layer holds the firm&#8217;s domain knowledge (precedents, templates, playbooks, the legal and regulatory databases) behind conflict walls, integrations into the document and matter systems lawyers already run, access under a licensed professional&#8217;s identity with matter-level permissions, an eval built from real matters, and an audit trail a bar association would accept. On top, role packages, one per role: contract review, litigation research, M&amp;A due diligence, and their peers. Harvey&#8217;s solution is exactly this shape. Its industry layer: a connector library of API and MCP integrations into iManage, NetDocuments, and Box; ethical walls synced from the firm&#8217;s conflict system; admin audit logs; firm precedents and playbooks indexed as grounding; its own benchmarks as the eval; and Word and Outlook add-ins, the interface living where lawyers already work. Its role layer: workflow agents and an agent builder that codify a firm&#8217;s expertise into reusable multi-step packages, plus hundreds of ready-made agents for specific practice areas. Anthropic&#8217;s open-source legal package, <a href="https://github.com/anthropics/claude-for-legal">claude-for-legal</a>, follows a similar structure. And Harvey&#8217;s own benchmark shows what the vertical harness buys: on its Legal Agent Benchmark, 1,200+ tasks mirroring real client matters and graded all-or-nothing, bare Claude Fable 5 tops out at 13.3%, while inside Harvey&#8217;s harness the same class of models was preferred by practicing lawyers up to 70% of the time.</p><p>An e-commerce harness fills the same layers differently. The industry layer is dominated by integration and access: OAuth into each storefront and ad account, every storefront&#8217;s format requirements encoded as skills, a budget the agent may spend, and no undo. Domain knowledge is platform rules, category taxonomy, seasonality, plus the merchant&#8217;s own brand story and operating experience. The eval can lean on scores the business already keeps: ROAS, conversion, refund rate. And the roles split the same way the work does: a listing operator runs batchable, checkable, correctable jobs; a media buyer spends real money at every step and waits days for feedback. Each gets its own package, with its own role knowledge.</p><p>Different industries will share this structure; what differs is the emphasis inside each layer.</p><div><hr></div><h2>IV. What enterprises buy</h2><p>No client buys a harness. They buy an outcome, delivered and proven: the campaign that hit its ROI target, the claim resolved to a satisfied customer, the monthly books closed without error. Delivering takes a runtime; proving takes an eval.</p><h3>The runtime is becoming the product</h3><p>As agent tasks stretch from minutes to days and move into business settings, the runtime&#8217;s job comes into focus: keep an agent executing stably over long horizons, keep its cost under control, and keep it observable and governable while it runs. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4SUs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4SUs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4SUs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:108909,&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.nemofq.com/i/210970750?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.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_!4SUs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!4SUs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63ff01e9-a1a9-4c23-8455-97de1810e54f_2400x1330.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 practice that means a set of modules now taking shape: isolated execution environments, state and checkpointing so runs can resume and be replayed, scheduling and triggers, spend caps, credential scoping, and the monitoring and audit surface where a human can watch a run and stop it. So the runtime is being productized; Anthropic&#8217;s <a href="https://claude.com/blog/claude-managed-agents">Managed Agents</a> is the clearest example so far, putting sandboxing, checkpointing, and credential scoping behind one API. The boundary between harness and runtime is genuinely blurry today, and many modules ship on both sides; my own working rule is that whatever an agent needs to complete a single execution of a task belongs to the harness, and whatever it needs to execute again and again, reliably and on schedule, belongs to the runtime. The loop is a commodity; keeping the loop running, safe, and stoppable is the business.</p><h3>The hard part is, and will continue to be, the eval</h3><p>For a vertical harness to keep improving, it needs a good eval, and a good eval needs exactly what every vertical lacks: data. Once the eval exists, the flywheel is standard: the eval scores the work, the scored work becomes data, and the data pays out twice: first it tunes the harness and the runtime, then it feeds agent RL to improve the model itself, lifting not just quality but efficiency, speed and cost. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2s0g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2s0g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2s0g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134923,&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.nemofq.com/i/210970750?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.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_!2s0g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 424w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 848w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!2s0g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15019b4e-3086-4c12-8e02-90ff29b16b1e_2400x1330.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 principle is simple. The work is not. Every vertical starts cold: the domain data is scarce, private, often privileged, and the experts who can define &#8220;correct&#8221; bill by the hour. The only way through is ground work with customers, building success cases with agents one by one, until the data and the eval compound. Slow, but worth it: whoever owns the eval owns the vertical.</p><div><hr></div><p>The vertical harness gives intelligence an industry's structure. The runtime keeps it executing. The eval proves the work, and compounds into the moat. And what comes out the end is the only thing a client ever buys: the outcome.</p><p>After coding and knowledge work, I believe intelligence of this kind will reach every industry, via vertical harnesses. I'm building in this space, working with customers along the way. If this resonates with you, I'd love to connect.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nautilus! 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>References</h2><ol><li><p><a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models">https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models</a></p></li><li><p><a href="https://x.com/Vtrivedy10/article/2031408954517971368">https://x.com/Vtrivedy10/article/2031408954517971368</a></p></li><li><p><a href="https://artificialanalysis.ai/evaluations/gdpval-aa">https://artificialanalysis.ai/evaluations/gdpval-aa</a></p></li><li><p><a href="https://artificialanalysis.ai/evaluations/enterprise-ops-gym-aa">https://artificialanalysis.ai/evaluations/enterprise-ops-gym-aa</a></p></li><li><p><a href="https://arxiv.org/abs/2603.13594">https://arxiv.org/abs/2603.13594</a></p></li><li><p><a href="https://claude.com/blog/how-people-are-using-claude-cowork">https://claude.com/blog/how-people-are-using-claude-cowork</a></p></li><li><p><a href="https://arxiv.org/abs/2505.18878">https://arxiv.org/abs/2505.18878</a></p></li><li><p><a href="https://www.harvey.ai/blog/fable-5-now-available-in-harvey">https://www.harvey.ai/blog/fable-5-now-available-in-harvey</a></p></li><li><p><a href="https://www.harvey.ai/blog/introducing-biglaw-bench-arena">https://www.harvey.ai/blog/introducing-biglaw-bench-arena</a></p></li><li><p><a href="https://www.harvey.ai/blog/top-harvey-use-cases">https://www.harvey.ai/blog/top-harvey-use-cases</a></p></li><li><p><a href="https://www.harvey.ai/blog/harvey-intapp-ethical-walls">https://www.harvey.ai/blog/harvey-intapp-ethical-walls</a></p></li></ol>]]></content:encoded></item><item><title><![CDATA[Configuration for Better Harness Engineering in OpenClaw: Run External Coding Agents (Codex, Claude Code, etc.) via ACP (Agent Client Protocol)]]></title><description><![CDATA[This guide walks through binding Codex and Claude Code to dedicated Telegram forum topics via OpenClaw's ACP (Agent Client Protocol) runtime.]]></description><link>https://www.nemofq.com/p/configuration-for-better-harness</link><guid isPermaLink="false">https://www.nemofq.com/p/configuration-for-better-harness</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Sat, 11 Apr 2026 00:12:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9SZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p>Update: As with everything in AI, things move fast. If you want to control Claude Code remotely, there are now several options beyond the OpenClaw-via-ACP approach discussed below - including this native one I'd recommend: <a href="https://code.claude.com/docs/en/channels">https://code.claude.com/docs/en/channels</a> <em>(currently supports Telegram, Discord, and iMessage)</em></p></div><h2><strong>Why ACP?</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://github.com/openclaw/acpx" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9SZE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9SZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91756,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/openclaw/acpx&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.nemofq.com/i/193846486?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.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_!9SZE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!9SZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde7d4e38-79b6-4044-be16-3d8ebc1d9f7e_1200x600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Compared to the conventional <a href="https://docs.openclaw.ai/tools/subagents">sub-agent</a> approach, ACP sessions offer three key advantages:</p><ul><li><p><strong>Resilient session lifecycle.</strong> ACP sessions survive OpenClaw gateway restarts - your Codex or Claude Code task picks up where it left off rather than being lost on a crash or redeploy.</p></li><li><p><strong>Dedicated workspaces.</strong> You can assign each coding agent its own working directory, and their conversations are isolated from your main chat - no context bleed between agents or with your primary OpenClaw session.</p></li><li><p><strong>Protocol-level benefits.</strong> As ACP evolves, improvements to streaming, tooling, and multi-agent coordination flow in as the protocol matures.</p></li></ul><div><hr></div><h2><strong>Prerequisites</strong></h2><ul><li><p>OpenClaw &gt;= 2026.3.8 installed</p></li><li><p>A working Telegram bot configured in OpenClaw (Telegram and Discord are the only two supported channels for this setup; this guide uses Telegram as the example)</p></li><li><p>Codex CLI and Claude Code CLI installed and authenticated</p></li></ul><div><hr></div><h2><strong>Step 1: Configure Telegram Bot Privacy</strong></h2><p>Before adding the bot to any group, disable its privacy mode.</p><p>BotFather &#8594; <code>/mybots</code> &#8594; select your bot &#8594; Bot Settings &#8594; Group Privacy &#8594; <strong>Turn off</strong></p><blockquote><p><strong>Important:</strong> Do this before adding the bot to the group. If done after, the bot may miss group messages until it is removed and re-added.</p></blockquote><div><hr></div><h2><strong>Step 2: Create a Telegram Group and Forum Topics</strong></h2><ol><li><p>Create a new Telegram group</p></li><li><p>Add your bot to the group and set it as Admin</p></li><li><p>Group Settings &#8594; Topics &#8594; Enable forum mode</p></li><li><p>Create two topics: <code>#Codex</code> and <code>#Claude</code></p></li></ol><div><hr></div><h2><strong>Step 3: Get Group ID and Topic IDs</strong></h2><p>Send a message in each topic, then query the Bot API:</p><pre><code>curl -s &#8220;https://api.telegram.org/bot&lt;TOKEN&gt;/getUpdates&#8221;</code></pre><p>Replace <code>&lt;TOKEN&gt;</code> with your bot token. Locate <code>chat.id</code> (Group ID) and <code>message_thread_id</code> (Topic ID) in the response, e.g.:</p><ul><li><p><code>chat.id</code>: <code>-1009876543210</code></p></li><li><p><code>message_thread_id</code>: <code>2</code>, <code>3</code></p></li></ul><div><hr></div><h2><strong>Step 4: Install and Configure the acpx Plugin</strong></h2><pre><code># Install the plugin
openclaw plugins install acpx

# Enable it
openclaw config set plugins.entries.acpx.enabled true

# Declare trust (suppresses startup warnings)
openclaw config set plugins.allow &#8216;[&#8221;acpx&#8221;]&#8217;

# ACP sessions have no TTY - auto-approve all file and command operations
openclaw config set plugins.entries.acpx.config.permissionMode approve-all

# Fail on unhandleable permission requests rather than silently skipping
openclaw config set plugins.entries.acpx.config.nonInteractivePermissions fail

# Give the queue owner enough time to acquire the session before it&#8217;s declared dead (Codex/Claude Code have slow startup)
openclaw config set plugins.entries.acpx.config.queueOwnerTtlSeconds 60</code></pre><p>Resulting config:</p><pre><code>&#8220;plugins&#8221;: {
  &#8220;allow&#8221;: [&#8221;acpx&#8221;],
  &#8220;entries&#8221;: {
    &#8220;acpx&#8221;: {
      &#8220;enabled&#8221;: true,
      &#8220;config&#8221;: {
        &#8220;permissionMode&#8221;: &#8220;approve-all&#8221;,
        &#8220;nonInteractivePermissions&#8221;: &#8220;fail&#8221;,
        &#8220;queueOwnerTtlSeconds&#8221;: 60
      }
    }
  }
}</code></pre><div><hr></div><h2><strong>Step 5: Global ACP Configuration</strong></h2><pre><code>openclaw config set acp.enabled true
openclaw config set acp.dispatch.enabled true
openclaw config set acp.backend acpx
openclaw config set acp.allowedAgents &#8216;[&#8221;codex&#8221;, &#8220;claude&#8221;]&#8217;
openclaw config set acp.maxConcurrentSessions 8
openclaw config set acp.stream.coalesceIdleMs 300
openclaw config set acp.stream.maxChunkChars 1200
openclaw config set acp.runtime.ttlMinutes 120</code></pre><p>Resulting config:</p><pre><code>&#8220;acp&#8221;: {
  &#8220;enabled&#8221;: true,
  &#8220;dispatch&#8221;: { &#8220;enabled&#8221;: true },
  &#8220;backend&#8221;: &#8220;acpx&#8221;,
  &#8220;allowedAgents&#8221;: [&#8221;codex&#8221;, &#8220;claude&#8221;],
  &#8220;maxConcurrentSessions&#8221;: 8,
  &#8220;stream&#8221;: {
    &#8220;coalesceIdleMs&#8221;: 300,    // Stream output coalescing interval (ms)
    &#8220;maxChunkChars&#8221;: 1200     // Max characters per push
  },
  &#8220;runtime&#8221;: {
    &#8220;ttlMinutes&#8221;: 120         // Session idle timeout (minutes)
  }
}</code></pre><div><hr></div><h2><strong>Step 6: Enable Thread Binding</strong></h2><pre><code>openclaw config set session.threadBindings.enabled true
openclaw config set session.threadBindings.idleHours 24
openclaw config set channels.telegram.threadBindings.enabled true
openclaw config set channels.telegram.threadBindings.spawnAcpSessions true</code></pre><p>Resulting config:</p><pre><code>&#8220;session&#8221;: {
  &#8220;threadBindings&#8221;: {
    &#8220;enabled&#8221;: true,
    &#8220;idleHours&#8221;: 24
  }
},
&#8220;channels&#8221;: {
  &#8220;telegram&#8221;: {
    &#8220;threadBindings&#8221;: {
      &#8220;enabled&#8221;: true,
      &#8220;spawnAcpSessions&#8221;: true  // Allow dynamic ACP session spawning in any topic or DM thread
    }
  }
}</code></pre><blockquote><p>With <code>spawnAcpSessions: true</code>, you can use <code>/acp spawn --thread auto</code> to create an ACP session in any topic or DM thread, supplementing static bindings.</p></blockquote><div><hr></div><h2><strong>Step 7: Configure Group and Topics</strong></h2><p>Run <code>openclaw config edit</code> and add the following under <code>channels.telegram</code>:</p><pre><code>&#8220;groups&#8221;: {
  &#8220;&lt;GROUP_ID&gt;&#8221;: {
    &#8220;requireMention&#8221;: false,
    &#8220;topics&#8221;: {
      &#8220;&lt;CODEX_TOPIC_ID&gt;&#8221;: { &#8220;requireMention&#8221;: false },
      &#8220;&lt;CLAUDE_TOPIC_ID&gt;&#8221;: { &#8220;requireMention&#8221;: false }
    }
  }
},
&#8220;accounts&#8221;: {
  &#8220;default&#8221;: {
    &#8220;groupPolicy&#8221;: &#8220;allowlist&#8221;,
    &#8220;groupAllowFrom&#8221;: [&#8221;&lt;YOUR_TELEGRAM_USER_ID&gt;&#8221;]
  }
}</code></pre><p><code>groupPolicy</code> and <code>groupAllowFrom</code> go under <code>accounts.default</code>; without both, group messages are silently dropped.</p><p>Replace <code>&lt;GROUP_ID&gt;</code>, <code>&lt;CODEX_TOPIC_ID&gt;</code>, and <code>&lt;CLAUDE_TOPIC_ID&gt;</code> with the values from Step 3.</p><div><hr></div><h2><strong>Step 8: Define Agents</strong></h2><p>Run <code>openclaw config edit</code> and append a <code>list</code> under <code>agents</code> (leave existing <code>defaults</code> intact):</p><pre><code>&#8220;agents&#8221;: {
  &#8220;defaults&#8221;: {
    // ... keep existing config ...
  },
  &#8220;list&#8221;: [
    {
      &#8220;id&#8221;: &#8220;codex&#8221;,
      &#8220;runtime&#8221;: {
        &#8220;type&#8221;: &#8220;acp&#8221;,
        &#8220;acp&#8221;: {
          &#8220;agent&#8221;: &#8220;codex&#8221;,
          &#8220;backend&#8221;: &#8220;acpx&#8221;,
          &#8220;mode&#8221;: &#8220;persistent&#8221;,
          &#8220;cwd&#8221;: &#8220;/your/workspace/path&#8221;
        }
      }
    },
    {
      &#8220;id&#8221;: &#8220;claude&#8221;,
      &#8220;runtime&#8221;: {
        &#8220;type&#8221;: &#8220;acp&#8221;,
        &#8220;acp&#8221;: {
          &#8220;agent&#8221;: &#8220;claude&#8221;,
          &#8220;backend&#8221;: &#8220;acpx&#8221;,
          &#8220;mode&#8221;: &#8220;persistent&#8221;,
          &#8220;cwd&#8221;: &#8220;/your/workspace/path&#8221;
        }
      }
    }
  ]
}</code></pre><div><hr></div><h2><strong>Step 9: Configure Bindings</strong></h2><p>Run <code>openclaw config edit</code> and add a top-level <code>bindings</code> array. Use <code>type: "acp"</code> for automatic session lifecycle management. The <code>peer.id</code> must use the canonical format <code>&lt;GROUP_ID&gt;:topic:&lt;TOPIC_ID&gt;</code>:</p><pre><code>&#8220;bindings&#8221;: [
  {
    &#8220;type&#8221;: &#8220;acp&#8221;,
    &#8220;agentId&#8221;: &#8220;codex&#8221;,
    &#8220;match&#8221;: {
      &#8220;channel&#8221;: &#8220;telegram&#8221;,
      &#8220;accountId&#8221;: &#8220;default&#8221;,
      &#8220;peer&#8221;: {
        &#8220;kind&#8221;: &#8220;group&#8221;,
        &#8220;id&#8221;: &#8220;&lt;GROUP_ID&gt;:topic:&lt;CODEX_TOPIC_ID&gt;&#8221;
      }
    },
    &#8220;acp&#8221;: { &#8220;label&#8221;: &#8220;codex&#8221; }
  },
  {
    &#8220;type&#8221;: &#8220;acp&#8221;,
    &#8220;agentId&#8221;: &#8220;claude&#8221;,
    &#8220;match&#8221;: {
      &#8220;channel&#8221;: &#8220;telegram&#8221;,
      &#8220;accountId&#8221;: &#8220;default&#8221;,
      &#8220;peer&#8221;: {
        &#8220;kind&#8221;: &#8220;group&#8221;,
        &#8220;id&#8221;: &#8220;&lt;GROUP_ID&gt;:topic:&lt;CLAUDE_TOPIC_ID&gt;&#8221;
      }
    },
    &#8220;acp&#8221;: { &#8220;label&#8221;: &#8220;claude&#8221; }
  }
]</code></pre><blockquote><p><code>type: "route"</code> only handles routing - session lifecycle is not managed and you must manually run <code>/acp spawn</code>. <code>type: "acp"</code> ensures the session exists automatically and is recommended for persistent bindings.</p><p><strong>Note:</strong> Telegram group IDs start with <code>-100</code> (e.g. <code>-1009876543210</code>). Make sure to include the full ID with the minus sign.</p></blockquote><div><hr></div><h2><strong>Step 10: Restart Gateway and Verify</strong></h2><pre><code>openclaw gateway</code></pre><p>In each topic, send:</p><pre><code><code>/acp doctor</code></code></pre><p>Expected response: <code>healthy: yes</code> with backend details. Run <code>/acp status</code> to confirm session state, then send <code>Who are you?</code> in each topic to verify the correct agent responds.</p><div><hr></div><h2><strong>Architecture Overview</strong></h2><pre><code><code>Telegram DM &#8594; default account &#8594; main agent (existing behavior unchanged)

Telegram Group
  &#9500;&#9472; Codex topic &#8594; default account &#8594; ACP binding &#8594; codex agent &#8594; acpx &#8594; Codex CLI
  &#9492;&#9472; Claude topic &#8594; default account &#8594; ACP binding &#8594; claude agent &#8594; acpx &#8594; Claude Code CLI</code></code></pre><p>A single bot handles DMs and group topics through independent session paths with no interference.</p><div><hr></div><p>Enjoy harness engineering!</p><h2><strong>References</strong></h2><ul><li><p><a href="https://docs.openclaw.ai/tools/acp-agents">OpenClaw Docs - ACP Agents</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[My 2025 Hardware Pick: Framework]]></title><description><![CDATA[You should be able to fix your stuff.]]></description><link>https://www.nemofq.com/p/my-2025-hardware-pick-framework</link><guid isPermaLink="false">https://www.nemofq.com/p/my-2025-hardware-pick-framework</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Thu, 01 Jan 2026 22:24:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Qx6Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As someone who enjoys tinkering with all kinds of hardware, here are my favorite picks of the year - 2025 edition. Also gotta keep this blog from being all 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_!ZZAs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZZAs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZZAs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11799139,&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.nemofq.com/i/183177948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.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_!ZZAs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZZAs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f12c160-4cea-4ad1-97d4-857b7e9d946e_6240x4160.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>My pick for this year is <a href="https://frame.work/">Framework</a> - I'm using the Laptop 13, and they also make the Laptop 12, 16, and Desktop variants.</p><p>There are a lot of discussions in the community about &#8220;why you should choose Framework,&#8221; but I find most of them miss the point. With how mature the PC industry is now, you won&#8217;t actually save money or time by being able to fix or upgrade your laptop. For me, buying a Framework comes down to two simple things: </p><ol><li><p>It&#8217;s a damn cool laptop</p></li><li><p>It&#8217;s the best Linux hardware with an active user base</p></li></ol><p>Since many Framework owners are tinkerers who run Linux, you get this rare community where almost any Linux issue you hit can be solved by or discussed with fellow users - whether you&#8217;re on <a href="https://frame.work/linux">officially supported distros</a> like Fedora, Ubuntu, and Bazzite, or others like Arch, Mint, or even more niche ones.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qx6Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14944035,&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;:false,&quot;internalRedirect&quot;:&quot;https://www.nemofq.com/i/183177948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.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_!Qx6Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Qx6Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59aea50-574a-4d1d-8139-03e6b8d4a216_6240x4160.jpeg 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><h3>Pros</h3><ul><li><p>2.8K 3:2 ratio 120Hz matte display - what more could you ask for productivity?</p></li><li><p>One of the best keyboards I&#8217;ve ever used on a laptop</p></li><li><p>Customizable bezel and Expansion Cards (ports) make your laptop unique - I&#8217;m running Translucent Black with a full-size SD card slot</p></li><li><p>Best Linux support you can get</p></li></ul><h3>Cons</h3><ul><li><p>No haptic touchpad</p></li><li><p>Build quality can be hit or miss - I had to RMA and replace the input cover (keyboard), bezel, and display right after it arrived</p></li></ul><h3>A few more things to recommend</h3><ol><li><p><strong><a href="https://dev.bazzite.gg/">Bazzite DX</a></strong> - a developer-focused variant of Bazzite, based on Universal Blue (which is built on immutable Fedora Atomic). It&#8217;s been my daily driver since I got this laptop, and it&#8217;s been perfect for dev work, productivity, and everyday use.</p></li><li><p><strong><a href="https://www.benq.com/en-us/monitor/programming/rd280ua.html">BenQ RD280UA monitor</a></strong> - a 28.2&#8221; 4K display with a 3:2 ratio. Simply the best monitor for programming. <em>(Updated 02/11/2026: BenQ just released an upgraded model <a href="https://www.benq.com/en-us/monitor/programming/rd280ug.html">RD280UG</a> with 120Hz refresh rate, 2000:1 contrast ratio, and thinner bezels, check it out!)</em></p></li><li><p><strong><a href="https://www.apple.com/shop/product/hs9d2zm/a/caldigit-thunderbolt-5-usb%E2%80%91c-pro-cable-05m">CalDigit Thunderbolt (USB-C) Pro Cable (0.5m)</a></strong> - if you want the cleanest connection between your monitor and laptop, this Apple Store-exclusive cable is it. <em>(Updated 02/12/2026: Apple just replaced it with an upgraded TB5 version at the same price.)</em></p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nautilus! 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[An Open-Source, Third-Party Chrome Extension for Pushbullet]]></title><description><![CDATA[Built by me and Claude Code.]]></description><link>https://www.nemofq.com/p/an-open-source-third-party-chrome</link><guid isPermaLink="false">https://www.nemofq.com/p/an-open-source-third-party-chrome</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Sat, 26 Jul 2025 20:50:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TuAZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Crossed 20,000 WAU on June 17, 2026</p></blockquote><blockquote><p>Crossed 10,000 WAU on February 2, 2026</p></blockquote><blockquote><p>End of 2025 update: </p><ul><li><p>7,000+ WAU</p></li><li><p>4.9&#9733; based on 56 ratings</p></li><li><p>32 releases, 190 commits</p></li><li><p>65 GitHub stars</p></li></ul></blockquote><p><strong>Chrome Web Store: </strong><a href="https://chromewebstore.google.com/detail/push-go/dghndapbehjdbhiffbckojkhoennbofg">https://chromewebstore.google.com/detail/push-go/dghndapbehjdbhiffbckojkhoennbofg</a></p><p><strong>GitHub Repo: </strong><a href="https://github.com/nemofq/pushbullet-go">https://github.com/nemofq/pushbullet-go</a></p><p>As a long-time Pushbullet (a great service that allows you to send texts and share files across devices) and ChromeOS user, when the official Chrome extension was removed due to compatibility issues, I had to build one myself, and with the help of AI of course.</p><h2>Claude Code</h2><p>I enjoyed using the combination of <a href="https://www.sublimetext.com/">Sublime</a>, <a href="https://packagecontrol.io/packages/Terminus">Terminus</a> (a terminal plugin in Sublime), and <a href="https://www.anthropic.com/claude-code">Claude Code</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TuAZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TuAZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 424w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 848w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 1272w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TuAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1006627,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.nemofq.com/i/169326212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.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_!TuAZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 424w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 848w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 1272w, https://substackcdn.com/image/fetch/$s_!TuAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b9f0e7b-1bec-4090-bd93-5d3c77b57fc2_3840x2560.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Compared to Cursor or VS Code w/ Augment plugin, this approach is definitely more "Agentic" - simply because you're assigning more screen space to your agent - yes I do think this tells a lot. In Cursor's default view, even with "Agent" mode, I still feel different. So for simpler projects, I now use these settings more - Claude Code gets most things (code) done while I monitor the changes only and do some critical actions in terminal now and then. </p><p>BTW - a 3:2 ratio monitor like <a href="https://www.benq.com/en-us/monitor/programming/rd280ua.html">the one</a> I'm using helps a lot for this use case, since both windows will have enough height to display code and history with your agent.</p><h2>The Pushbullet Extension</h2><p>This is a lightweight Chrome extension for Pushbullet that enables receiving and sending pushes from browser, including files and images. You can also send the current page's URL or selected text/images directly from the context menu. Furthermore, you can filter the received pushes and control which device to push to in options.</p><p>This extension stores everything locally, and only communicates with the official Pushbullet API.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-DjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-DjF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-DjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:153187,&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.nemofq.com/i/169326212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.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_!-DjF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!-DjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa212afe0-d3b0-4e6f-b8c4-f979a4709e0d_1280x800.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>One More Thing</h2><p>If you&#8217;re still using Pushbullet on iOS like me, you may find following Shortcuts useful: </p><ul><li><p><a href="https://www.icloud.com/shortcuts/5549bbb5b06e4f0a8ccb1b6fd33e853f">Push to Pushbullet</a></p></li><li><p><a href="https://www.icloud.com/shortcuts/1f94913de21b41debe60ef43631afde2">Pushbullet Receiver</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nemo&#8217;s Voice! 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[Recap of Vibe Coding in May 2025 | How I Built a Full Product with 10k Lines of Code in One Month]]></title><description><![CDATA[What I learned from building the AI podcast tool - deepdialogue.pro with AI.]]></description><link>https://www.nemofq.com/p/recap-of-vibe-coding-in-may-2025</link><guid isPermaLink="false">https://www.nemofq.com/p/recap-of-vibe-coding-in-may-2025</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Fri, 30 May 2025 19:18:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!c-Wl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p><em>Update: Ignore and forget everything I wrote, just use <a href="https://claude.com/product/claude-code">Claude Code</a>.</em></p></div><h2>Context</h2><p>About a month ago, I saw a <a href="https://www.linkedin.com/posts/brendanhumphreys_no-you-wont-be-vibe-coding-your-way-to-activity-7305080254417547264-qidy/">post</a> from Canva's CTO Brendan Humphreys:</p><div class="pullquote"><p><strong>No, you won't be vibe coding your way to production.</strong></p><p><strong>Not if you prioritise quality, safety, security, and long-term maintainability at scale.</strong></p></div><p>This resonated with my observations of vibe coding at that time, but I wanted to know for sure, and if indeed vibe coding wasn't there yet, what was missing and what strategies we could use to fill the gap.</p><p>And there's no better way to find out than by actually building a production-level product with AI.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nemo&#8217;s Voice! 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>Result</h2><p>Screenshot of the product I built in one month:<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c-Wl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c-Wl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 424w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 848w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 1272w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c-Wl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp" width="1456" height="925" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/960548bc-72bc-4036-b374-00359942e073_1920x1220.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:925,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260256,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nemofq.substack.com/i/164765925?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c-Wl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 424w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 848w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 1272w, https://substackcdn.com/image/fetch/$s_!c-Wl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F960548bc-72bc-4036-b374-00359942e073_1920x1220.webp 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 idea came from my own pain points when listening to long, conversational podcasts (e.g., <a href="https://podcasts.apple.com/us/podcast/all-in-with-chamath-jason-sacks-friedberg/id1502871393">All-In</a>, <a href="https://podcasts.apple.com/us/podcast/lex-fridman-podcast/id1434243584">Lex Fridman</a>). I wanted something to help me follow conversations effortlessly and allow me to easily navigate through time and different speakers to uncover hidden insights.</p><p>So I built this AI podcast tool called <a href="https://www.deepdialogue.pro/">DeepDialogue</a> that converts audio into clearly speaker-diarized transcripts with handy features like speaker filtering, active highlighting, auto-scroll, and quick navigation. Most importantly, it includes an AI chatbot that has complete understanding of the podcast content to answer any questions&#8212;whether you need summaries or want to extract specific speaker viewpoints. </p><p><strong>Try it</strong>: <a href="https://www.deepdialogue.pro/">https://www.deepdialogue.pro/</a></p><p>This is a substantial project spanning nearly 10,000 lines of code, built with a tech stack including Next.js framework, React for the frontend, and a hybrid Node.js and Python backend.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cm0m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cm0m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 424w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 848w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 1272w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cm0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png" width="728" height="203.33167082294264" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:224,&quot;width&quot;:802,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:22344,&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://nemofq.substack.com/i/164765925?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da2498a-d298-4488-bf16-50fc1e547592_802x275.png&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_!cm0m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 424w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 848w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 1272w, https://substackcdn.com/image/fetch/$s_!cm0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f2ba3fb-415f-4a74-86a3-c3bc6cd4b739_802x224.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Tactics</h2><p>Here are 6 useful tactics I found in this journey for vibe coders.</p><h3>1. Define your end goal</h3><p>There are actually two types of vibe coding, and people often mix them:</p><ul><li><p>For people who can program: To help them <strong>ship</strong> faster. Typical products include Cursor, Windsurf, and Augment Code.</p></li><li><p>For citizen developers: To help them <strong>create</strong> without learning coding, like Bolt.new and Lovable.</p></li></ul><p>There's some overlap/ambiguity in between. </p><p>For example, if someone wants to build a tool to track the latest stock market movements and news for certain tickers, both Cursor and Lovable could help them get it done. But it's important to define your end goal and identify who you are before choosing the appropriate path, to avoid wasting time and resources on the wrong one. </p><p>If you haven't written code in the past and want to create something for yourself and friends without complex login/payment/database/API interactions, the tools I mentioned for citizen developers would be really amazing. Even universal agent products like Manus and Genspark fit this category in my view, since they essentially turn each task into a "program" as output.</p><p>Personally, I don't have much experience with tools for citizen developers, but I do feel that the current bottleneck is not the LLM (at least not the biggest one anymore), but rather the following two issues:</p><ol><li><p>How to integrate with third-party systems (e.g., databases/storage/auth/payment/APIs)? Traditional providers are overkill here. If someone could define a payment capability that every website can have with a prompt or two, it could be the new Stripe. MCP could be one answer here.</p></li><li><p>How to distribute people's creations? We need a new App Store and Google Play for this. Happy to see new products like <a href="https://www.youware.com/">YouWare</a> appear in this domain.</p></li></ol><p>For coding agents designed for programmers, context window (or effective context window) limitations are the culprit behind many issues.</p><h3>2. Choose the best model</h3><p>Choose the best model, not the tool. Whether it's VS Code derivatives like Cursor or Windsurf, or plugins like Augment Code and Cline, I don't think they make huge differences beyond user preferences and interaction details. For example, in this project, because of the huge amount of token consumption needed, I simply used the customer-facing Claude and Gemini chatbots with Sublime editor. But don't get me wrong here&#8212;they still matter a lot for competition, adoption rates, and accumulating data for better models and products.</p><p>Which LLM is the best for coding might be the easiest question among the community: Gemini 2.5 Pro = Claude (3.5/3.7/4) &gt; All Others.</p><p>From my interactions with these top two models, I do have some comparisons to share:</p><p><strong>Gemini 2.5 Pro:</strong></p><ul><li><p>Pros:</p><ul><li><p>Larger context window, allowing you to follow up on your tasks multiple (typically 10+) times without degraded intelligence</p></li><li><p>Great at logic problems, like debugging business logic issues</p></li></ul></li><li><p>Cons:</p><ul><li><p>Possibilities of losing control over language preference&#8212;you'll see all sorts of languages (e.g. Spanish, German) appear (good news is this doesn't affect the code part)</p></li><li><p>Possibilities of getting stuck at "Show thinking"&#8212;re-sending the message could fix this</p></li><li><p>Not so good at UI, often uses more complex methods to achieve the same design</p></li><li><p>Writes too many and overly long comments in my opinion (internal habit/requirements at Google?)</p></li></ul></li></ul><p><strong>Claude (3.5/3.7/4) :</strong></p><ul><li><p>Pros:</p><ul><li><p>Can write concise and beautiful UI code</p></li><li><p>Faster response (without thinking)</p></li></ul></li><li><p>Cons:</p><ul><li><p>Effective context window is quite small&#8212;you'll notice significantly degraded performance when conversations become long and you're forced to create a new chat</p></li><li><p>For complex logic problems, it will give you multiple options, but more often than not, none of them work, which causes more disappointment if you actually tried every option</p></li></ul></li></ul><p>If you don't know which model to choose? Simple&#8212;just copy and paste your prompt to both of them, get some coffee, and come back to compare which one you prefer :)</p><h3>3. Start from a template</h3><p>If only one piece of advice were allowed, this would be what I give to vibe coders starting a new project.</p><p>The root cause of this issue is still the context window limitation of LLMs. Because of context constraints, once your project is underway and has accumulated some amount of code, it becomes impossible for the LLM to read all the project files and code, identify the connections and data flow between components, and then implement new features or fix bugs. </p><p>The context window would simply be overloaded. </p><p>For instance, I once needed to fix a height inheritance issue in UI code (which is quite common in Tailwind CSS), but it required editing multiple files along the component tree. I gave up after trying to use the model several times and ended up manually fixing it myself.</p><p>To make matters worse, LLMs naturally tend to scatter code everywhere when implementing one feature. All of this could be avoided if you start from a template, which helps establish clear, independent positioning for each module&#8212;resulting in the LLM only needing to work within a single block or file of code.</p><p>It's like hiring a human architect, so I recommend everyone do this. It's worth spending some time to find the best template that suits your case before writing your first line of code, or prompt. Here are two templates I recommend: </p><ul><li><p><a href="https://github.com/nextjs/saas-starter">Next.js SaaS Starter</a> by Vercel</p></li><li><p><a href="https://github.com/ShenSeanChen/launch-mvp-stripe-nextjs-supabase">Next.js + Stripe + Supabase Production-Ready Template</a> from my friend Sean</p></li></ul><h3>4. Code backwards</h3><p><a href="https://www.aboutamazon.com/news/workplace/an-insider-look-at-amazons-culture-and-processes">"Working Backwards"</a> is a well-known product development approach invented by Amazon and later adopted broadly by other big tech companies like Airbnb and ByteDance. The key tenet of this process is to start by defining the customer experience, then iteratively work backwards from that point.</p><p>In vibe coding, we can "code backwards." Just throw every token you have at the problem&#8212;prompt, copy/paste code to see if it works or not, then come back and prompt again, until you have a working version. I call this process "Punch Through."</p><p>Based on the working version, now you can read it to understand how to optimize the code, adjust unnecessary parts, add details, and ultimately achieve code that meets your requirements and is maintainable going forward&#8212;rather than the overly complex, unclear logic that LLMs directly produce.</p><h3>5. Make every shot long and count</h3><p>Because of the nature of how LLM chat manages context&#8212;accumulating with every round of conversation, which means every time you send something you're sending the whole conversation history with your latest prompt&#8212;plus the current context window limitation, you can expect the first couple rounds of conversation to be the most intelligent, or even just the first one to be most effective.</p><p>So instead of sending short messages to waste the context window, just prepare your prompt to be as comprehensive as possible, and don't worry about it being too long. This might be counter-intuitive, but it's actually a more effective prompting approach.</p><p>When working on this project, I frequently wrote prompts of thousands of lines of text, including multiple code files and detailed requirements, desired data flow, etc., and it just works, especially for your first one or two rounds of conversation.</p><h3>6. Use AI-friendly service/SDK</h3><p>My definition of AI-friendly for services/SDKs has two aspects:</p><ol><li><p><strong>Comprehensive, detailed documentation:</strong> This means LLMs could have already learned a lot during pre-training, and you can easily find and send the latest updates if the LLM doesn't have it.</p></li><li><p><strong>Simplified permission management:</strong> This frees LLMs from having to navigate through the hierarchy of traditional permission/authentication management. In my experience, they're really not good at it&#8212;same as human developers.</p></li></ol><p>So here are some choices I would highly recommend you try:</p><ul><li><p><a href="https://vercel.com/">Vercel</a> for hosting</p></li><li><p><a href="https://supabase.com/">Supabase</a> for database and auth</p></li><li><p><a href="https://ai-sdk.dev/">AI SDK</a> by Vercel for integrating LLM-based features like chatbots into your product</p></li></ul><p>Unfortunately, I don't find any billing/payment solution to be super-easy for vibe coding projects, so let me know if you have recommendations here.</p><h2>Recap</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/CtzoO/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42ed9fcc-41c2-447b-bec5-999937f9c7d8_1260x660.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:400,&quot;title&quot;:&quot;Six Useful Tactics for Vibe Coding&quot;,&quot;description&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/CtzoO/2/" width="730" height="400" frameborder="0" scrolling="no" loading="lazy"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Apparently, the "context window" is the most important factor in LLMs for vibe coding now. I can't wait to see a model achieve breakthrough here along with improved intelligence.</p><p>And lastly, try the product of my vibe coding journey here: </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.deepdialogue.pro/&quot;,&quot;text&quot;:&quot;Try DeepDialogue - AI Tool for Podcast&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.deepdialogue.pro/"><span>Try DeepDialogue - AI Tool for Podcast</span></a></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Weekends and evenings only - I estimate it was roughly equivalent to 1.5 weeks of full-time work.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[My First Paper]]></title><description><![CDATA[Use LLM to analyze Reddit posts and predict stock price.]]></description><link>https://www.nemofq.com/p/my-first-paper</link><guid isPermaLink="false">https://www.nemofq.com/p/my-first-paper</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Thu, 01 May 2025 03:27:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8fcb7e4d-ae1f-4202-8686-20b3602d260c_640x381.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Link to the preprint version: <a href="http://dx.doi.org/10.13140/RG.2.2.18713.33127">http://dx.doi.org/10.13140/RG.2.2.18713.33127</a></p><blockquote><p><strong>Abstract</strong></p><p>We investigate the predictive power of LLM-based sentiment analysis in the 2021 GameStop short squeeze, analyzing 665,275 Reddit posts from r/wallstreetbets and r/GME using Claude 3 Haiku. Logistic regression models were trained on sentiment data to forecast the next trading day's price movement direction using a rolling window approach. The model achieved 60% accuracy, exceeding prior social media-based stock prediction studies. However, trading strategies based on the model underperformed the buy-and-hold benchmark in returns (113.3% vs. 291.5%), despite showing better risk control with lower maximum drawdown (61.0% vs. 84.7%), highlighting the need for further optimization. These findings demonstrate LLM-driven text analysis can effectively capture retail investor sentiment, offering potential applications in trading strategies.</p></blockquote><p>This idea was born shortly after the ChatGPT moment, and most of the research work was actually done quite early (which explains why I used Claude 3, a model that was SOTA then but is now way outdated... LLM development has been incredibly fast). It took quite a long time for me to finish this work due to various reasons, including the fact that this is my first paper, but finally here we are.</p><p>Despite the research focusing on the GameStop short squeeze in 2021&#8212;an extremely unique event that may never happen again (but who knows)&#8212;the journey and conclusions I gained from this study were fascinating and insightful. LLMs are definitely capable of analyzing user-generated content, which can then be used to build effective prediction models and trading strategies. I'm also very excited to see innovative projects like <a href="https://github.com/virattt/ai-hedge-fund">AI Hedge Funds</a> applying LLMs and agents in the financial world.</p><p>One more thing - this is also my first time using LaTeX, which I discovered is actually very similar to frontend languages, and unsurprisingly, LLMs and coding agents can help a lot with writing it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nemo&#8217;s Voice! 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[You Should Distill, Too]]></title><description><![CDATA[When using ChatGPT, Cursor, or other AI products, adopting the philosophy of distillation could help you achieve better results.]]></description><link>https://www.nemofq.com/p/you-should-distill-too</link><guid isPermaLink="false">https://www.nemofq.com/p/you-should-distill-too</guid><dc:creator><![CDATA[Nemo Feng]]></dc:creator><pubDate>Tue, 04 Feb 2025 06:29:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a61a080a-d832-4326-b718-15da774149ed_1050x750.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Intro</h2><p>With recent flooding discussions around DeepSeek, one concept appears in almost every article, news piece, and podcast: Distillation.</p><p>In the LLM training space, distillation is a technique to transfer knowledge from a large "teacher" model into a smaller "student" model, allowing the smaller model to perform better while reducing inference costs.</p><p>For us users, we can and should use the same strategy in our daily interactions with AI products.</p><h2>Why</h2><p>Currently, the models we have at hand can be roughly categorized into two types:</p><ul><li><p>Reasoning models: OpenAI o1/DeepSeek R1</p></li><li><p>General-purpose models: OpenAI GPT-4o/Claude 3.5 Sonnet/DeepSeek V3</p></li></ul><p>While reasoning models outperform general-purpose models in benchmarks, why can't we just use o1 or R1 all the time? There are several reasons:</p><ul><li><p>Cost: Whether accessed via ChatGPT or APIs, reasoning models come at a significantly higher price. For example, Plus plan users get only 50 o1 messages per week on ChatGPT. DeepSeek R1, an o1-equivalent reasoning model, offers ~93% lower inference costs, which definitely could be a game changer - but other factors still matter.</p></li><li><p>Speed: Reasoning models build on their unique and powerful "reason before answer" approach, or Chain-of-Thought, but this introduces significant latency that may be intolerable for certain tasks.</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_!Ck0c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ck0c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 424w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 848w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 1272w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ck0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png" width="1407" height="751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:751,&quot;width&quot;:1407,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130459,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ck0c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 424w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 848w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.png 1272w, https://substackcdn.com/image/fetch/$s_!Ck0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0f168e7-082b-4739-831f-a4e5e1bfc36b_1407x751.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><ul><li><p>Overthinking: Sometimes, reasoning models overthink and generate less-than-ideal responses. In such cases, the extra time spent on reasoning feels even more like a waste.</p></li><li><p>Offline-only: There are cases where you do need up-to-date knowledge.</p></li></ul><h2>How</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ar9v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ar9v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ar9v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg" width="1456" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:993546,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ar9v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ar9v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56363972-714e-4b77-862a-7b74c13d5a15_4240x1491.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It's simple, just like distillation in model training - for certain (not all) tasks, start by asking a reasoning model to generate a detailed "action plan" for the general-purpose model to follow. This plan should always include:</p><ul><li><p>Your goals</p></li><li><p>High-level strategy</p></li><li><p>Critical context</p></li><li><p>Conversation guidelines (since you&#8217;ll likely have multiple rounds of interaction with the general-purpose model)</p></li><li><p>Feedback rules (when the model should ask for human input)</p></li></ul><p>This method is highly effective in many scenarios and has already become my best practice. Here are two use cases, and I know others are using this technique (or similar ones). If you have additional use cases, feel free to share them in the comments.</p><h3>Case 1 - Coding a New Project</h3><p>I recently wrote a Chrome extension using Cursor. Initially, I started directly with Cursor, and it quickly became chaotic. I encountered problems like message transmission between modules and Chrome&#8217;s module-specific operation restrictions. These issues were beyond Cursor&#8217;s capability to properly fix. After getting a detailed design from o1, I passed it to Cursor to start fresh, and everything went much more smoothly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yip9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yip9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 424w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 848w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 1272w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yip9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png" width="1456" height="774" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:774,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:252190,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yip9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 424w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 848w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.png 1272w, https://substackcdn.com/image/fetch/$s_!Yip9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbcf78a0-79ce-453a-981b-bfe9383be959_1868x993.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Learning from that experience, I now begin every new project by asking o1/R1 to generate a system design. This includes the code architecture, key contexts (e.g., API documents, known restrictions), and personal preferences (e.g., code style, log rules) based on my goals. Compared to giving instructions directly to Cursor, I find this approach produces much better-structured code with a clearer architecture. It also saves significant time by preventing messy dependencies and ensuring the right approach for implementing features.</p><h3>Case 2 - Reading a Paper</h3><p>With new papers in AI falling like snowflakes, reading has become a daily task. Each reading session is unique - a mix of personal background, the paper&#8217;s topic, and the specific angle you&#8217;re interested in.</p><p>For me, staying in flow state while reading is crucial. To achieve this, I first send my background, a summary of the paper, my key focus areas, and my preferred conversation style to a reasoning model to generate a task brief. I then pass this brief to a general-purpose model. During the actual reading, I simply send copied text from the paper or ask questions as needed, allowing for quick and seamless interactions.</p><p>Speed matters here. I initially tried using a reasoning model directly, but its long thinking process constantly disrupted my flow. For DeepSeek&#8217;s most recent paper, I used the R1/V3 combination with this approach, and it worked exceptionally well.</p><h2>Next</h2><p>Here's what I expect or hope will happen:</p><ul><li><p>AI applications adopting this approach: I&#8217;d love to see Cursor using reasoning models to plan before execution for complex tasks. Currently, Cursor (using Composer mode, which combines Cursor&#8217;s own model with Claude 3.5 Sonnet) is often overconfident and breaks things. This approach would also make it more agentic - like humans, reasoning before acting.</p></li><li><p>Model improvements: If reasoning models become faster, cheaper, and smarter, we might not need this approach at all. OpenAI&#8217;s newest o3-mini family, launched last Friday, is definitely a step in that direction - offering lower costs, improved speed, and multiple reasoning levels to choose from (mitigating overthinking).</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.nemofq.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 Nemo&#8217;s Voice! 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></channel></rss>