<?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[JohnWang.AI]]></title><description><![CDATA[Notes from the Frontier]]></description><link>https://www.johnwang.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!N37-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ccd44-57e9-442d-a32e-82fe4f8b5194_144x144.png</url><title>JohnWang.AI</title><link>https://www.johnwang.ai</link></image><generator>Substack</generator><lastBuildDate>Tue, 26 May 2026 17:59:04 GMT</lastBuildDate><atom:link href="https://www.johnwang.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[John Wang]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[vibeminds@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[vibeminds@substack.com]]></itunes:email><itunes:name><![CDATA[John Wang]]></itunes:name></itunes:owner><itunes:author><![CDATA[John Wang]]></itunes:author><googleplay:owner><![CDATA[vibeminds@substack.com]]></googleplay:owner><googleplay:email><![CDATA[vibeminds@substack.com]]></googleplay:email><googleplay:author><![CDATA[John Wang]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[DIRECT: Six Principles for Designing Software That AI Agents Can Use]]></title><description><![CDATA[After three months of intensive collaboration with Claude, resulting in 3,500+ commits, 300+ releases, and over 1 million lines across 124 public repositories, I&#8217;ve collected some of my general thoughts in 7 Techniques for Scaling AI Usage , but also wanted to provide some specific thoughts on the Agent Experience (AX) and how to make agent-friendly software in a set of principles that I call]]></description><link>https://www.johnwang.ai/p/direct-six-principles-for-designing</link><guid isPermaLink="false">https://www.johnwang.ai/p/direct-six-principles-for-designing</guid><dc:creator><![CDATA[John Wang]]></dc:creator><pubDate>Mon, 13 Apr 2026 12:06:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tuFY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tuFY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tuFY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 424w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 848w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 1272w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tuFY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png" width="1456" height="530" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127417,&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.johnwang.ai/i/193613662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.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_!tuFY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 424w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 848w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 1272w, https://substackcdn.com/image/fetch/$s_!tuFY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18fa072e-613b-4e49-95d2-6017b43e4322_2108x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After three months of intensive collaboration with Claude, resulting in 3,500+ commits, 300+ releases, and over 1 million lines across 124 public repositories, I&#8217;ve collected some of my general thoughts in <strong><a href="https://www.johnwang.ai/p/7-techniques-for-scaling-ai-usage">7 Techniques for Scaling AI Usage</a></strong> , but also wanted to provide some specific thoughts on the Agent Experience (AX) and how to make agent-friendly software in a set of principles that I call <a href="https://grokify.github.io/direct-principles/">DIRECT</a>. These principles are designed to help us think about designing the Agent Experience, the same way that SOLID changed how we think about object-oriented design (OOD).</p><h2>The Conversation Has Started &#8212; Now We Need to Codify It</h2><p>The industry has started to discuss Agent Experience, or AX. Netlify launched <a href="https://agentexperience.ax/">agentexperience.ax</a> to define AX as &#8220;the holistic experience AI agents have when interacting with a product, platform, or system&#8221; &#8212; the AI counterpart to UX and DX. This is important , and their call for community collaboration is valuable.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.AI! 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>While discussion is a start, we need more. We need <strong>codified principles</strong> that developers and agents can apply and tools can enforce. That&#8217;s what DIRECT provides.</p><h2>What is DIRECT?</h2><p>DIRECT is to Agent Experience what SOLID is to Object-Oriented Design: a foundational set of principles that guide the creation of interfaces AI agents can reliably use.</p><ul><li><p><strong>D</strong>eterministic: Agents trust the system to behave the same way each time, making safe recovery from errors natural.</p></li><li><p><strong>I</strong>ntrospectable: Agents explore capabilities and understand data structures without requiring external docs or humans</p></li><li><p><strong>R</strong>ecoverable: Agents can diagnose what went wrong and take corrective action without human intervention</p></li><li><p><strong>E</strong>xplicit: Agents operate within clear boundaries and constraints so they act with confidence</p></li><li><p><strong>C</strong>onsistent: Agents build mental models once and apply them everywhere, scaling their effectiveness</p></li><li><p><strong>T</strong>estable: Agents can try actions safely before committing, learning what works without causing harm</p></li></ul><p>These aren&#8217;t abstract ideals. Each principle addresses a specific failure mode I encountered repeatedly while working with agents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6hnf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6hnf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 424w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 848w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6hnf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png" width="1450" height="1662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1662,&quot;width&quot;:1450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1363565,&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.johnwang.ai/i/193613662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.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_!6hnf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 424w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 848w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!6hnf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5444b749-665c-400d-a7f7-c050b95ef358_1450x1662.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Interactive version at <a href="https://grokify.github.io/direct-principles/">https://grokify.github.io/direct-principles/</a></figcaption></figure></div><h2>AX Over DX: A Counterintuitive Approach</h2><p>Here&#8217;s what surprised me most: <strong>I stopped using traditional Developer Experience and started relying on Agent Experience.</strong></p><p>I built 25+ integrations for my <a href="https://plexusone.dev/">PlexusOne</a> stack across LLM providers (OpenAI, Anthropic, Google, xAI, Ollama), observability platforms (Opik, Langfuse, Phoenix), voice services (Deepgram, ElevenLabs, Twilio), search APIs, and infrastructure tools. Instead of reading documentation or learning SDKs myself, I provided information to Claude, such as OpenAPI specs, Python SDK source code, and we discuss the implementation together.</p><p>I know what good DX looks like, from both from using many APIs/SDKs and my time on the RingCentral Developer Program, which won seven industry awards including API World&#8217;s Best in Communications APIs (2018, 2019, 2021), DevPortal Awards&#8217; Best Developer Dashboard, and Nordic APIs&#8217; Best Public API.</p><p>But when working with agents, I&#8217;ve learned to make different choices. For example:</p><ul><li><p>When a human developer sees <strong>400 Bad Request</strong>, they read the error message, check the docs, maybe search Stack Overflow. They iterate through understanding.</p></li><li><p>When an agent sees <strong>400 Bad Request</strong>, it can hallucinates a fix that makes things worse. Agents don&#8217;t &#8220;understand&#8221; in the human sense, so I need to step in. They need structured, unambiguous interfaces to operate reliably.</p></li></ul><p>This realization led me to develop DIRECT.</p><h2>How I Learned This (The Hard Way)</h2><p>In Q1 2026, I ran an experiment: use AI agents as my primary development partner for as much work as possible. The results were staggering in scale:</p><ul><li><p>Commits: 3,561</p></li><li><p>Releases: 304</p></li><li><p>Lines Added: 1,696,636</p></li><li><p>Lines Deleted: 689,678</p></li><li><p>Net New Lines: 1,006,958</p></li><li><p>Repositories: 124</p></li></ul><p>But raw numbers don&#8217;t tell the entire story. The story is in what worked and what didn&#8217;t.</p><ul><li><p><strong>What worked:</strong> When I gave Claude well-structured specifications, explicit constraints, and consistent patterns, it produced code I could trust. Iteration was fast. Errors were recoverable.</p></li><li><p><strong>What didn&#8217;t work:</strong> When interfaces were ambiguous or counterintuitive, when error messages were vague, when behavior varied unpredictably- the agent would spin. I&#8217;d watch it make the same mistake multiple times, until I needed to step in and suggest alternative approaches.</p></li></ul><p>The pattern became clear: <strong>agent effectiveness depends more on interface design than on model capability.</strong></p><h2>The Three Things You Should Do With Agents</h2><p>Working this intensively with agents taught me there are three complementary activities, all of which can benefit from DIRECT experiences:</p><h3>1. Working With Agents</h3><p>This is where most people start. Use Claude, GPT, or Copilot to help you code. It works &#8212; sometimes brilliantly, sometimes frustratingly.</p><p>The frustration usually isn&#8217;t the agent&#8217;s fault. It&#8217;s the interface&#8217;s fault, which is why we&#8217;ve created the practice of prompt engineering.</p><h3>2. Build Tools That Make Agents More Efficient</h3><p>Once you see agents struggle with the same problems repeatedly, you start building solutions. Over Q1, I built or contributed to 11 tools specifically designed for agent-assisted development:</p><ul><li><p><a href="https://github.com/plexusone/agent-team-release">agent-team-release</a>: Release automation &#8212; R, C, T</p></li><li><p><a href="https://github.com/plexusone/ax-spec">ax-spec</a>: OpenAPI linting &amp; enrichment &#8212; I, E</p></li><li><p><a href="https://github.com/plexusone/design-system-spec">design-system-spec</a>: Design systems as code &#8212; I, C</p></li><li><p><a href="https://github.com/grokify/schemalint">schemalint</a>: Schema validation for static typing &#8212; D, E</p></li><li><p><a href="https://github.com/grokify/structured-changelog">structured-changelog</a>: Token-efficient changelogs &#8212; I, E, C</p></li><li><p><a href="https://github.com/grokify/traffic2openapi">traffic2openapi</a>: Generate specs from HTTP traffic &#8212; I, E</p></li><li><p><a href="https://github.com/plexusone/w3pilot">w3pilot</a>: Browser automation for agents &#8212; I, R, T</p></li></ul><p>Each tool embodies specific DIRECT principles and are agent-first. For example, structured-changelog is designed for changelog creation using LLM agents, unlike other solutions that use raw git logs determinisiticaly. It and other tools output in TOON format (Token-Oriented Object Notation) by default &#8212; approximately 8x more token-efficient than raw git log output. When agents pay for context in tokens, efficiency matters.</p><h3>3. Orchestrating Agents in Teams</h3><p>The most powerful pattern I discovered: agents working together, each with specialized capabilities, coordinated through well-defined interfaces.</p><p>This is where DIRECT principles become essential. When Agent A calls a tool that Agent B will consume the output of, every principle matters:</p><ul><li><p><strong>Deterministic</strong>: Agent B can rely on consistent output structure</p></li><li><p><strong>Introspectable</strong>: Agent B can discover what the output contains</p></li><li><p><strong>Recoverable</strong>: Errors include enough context for Agent B to adapt</p></li><li><p><strong>Explicit</strong>: No hidden assumptions between agents</p></li><li><p><strong>Consistent</strong>: Patterns learned from one interaction transfer to others</p></li><li><p><strong>Testable</strong>: Agents can validate their plans before execution</p></li></ul><p>My <a href="https://github.com/plexusone/agent-team-release">release agent team</a> orchestrates multiple specialized agents (QA, security, documentation, release management) to handle software releases. Each agent operates on DIRECT-compliant interfaces, enabling autonomous coordination. The team structure and handoff forms are defined using <a href="https://github.com/plexusone/multi-agent-spec">multi-agent-spec</a>&#8212;a formal specification that declares agent capabilities, workflow dependencies, and typed inputs/outputs between steps.</p><h2>Example: Choosing ogen for OpenAPI code generation</h2><p>When generating Go structs from OpenAPI specs, I evaluated several tools. The most &#8220;ergonomic&#8221; ones for humans &#8212; oapi-codegen, go-swagger &#8212; produce code that&#8217;s easier to read but makes assumptions that can confuse agents. They might flatten nested types, use interface{} for ambiguous schemas, or generate helper methods with implicit behavior.</p><p>I chose <a href="https://github.com/ogen-go/ogen">ogen</a> instead. It&#8217;s more verbose, less ergonomic for humans, but extremely <strong>correct</strong>. Every type is explicit. Every field is deterministic. Every validation is clear.</p><p>For a human developer, this verbosity feels like friction. For an agent, it&#8217;s clarity. The agent never has to guess what a type contains or how validation works &#8212; it&#8217;s all explicit in the generated code.</p><p>This is DIRECT&#8217;s <strong>Explicit</strong> principle in action: when the choice is between human ergonomics and machine clarity, choose clarity. Humans can learn conventions; agents need explicit declarations.</p><h2>What Does &#8220;Developer Program&#8221; Mean in 2026?</h2><p>This raises a question I&#8217;ve been thinking about: <strong>what does it mean to run a developer program when your users are no longer just humans?</strong></p><p>When I ran the RingCentral developer program, success metrics were human-centric: time-to-first-call, documentation satisfaction scores, SDK adoption rates, developer NPS. We optimized for humans reading docs, humans debugging in sandboxes, humans asking questions in forums.</p><p>But if agents are increasingly the ones consuming your APIs, the game changes rom traditional UX to AX:</p><ul><li><p>Readable documentation &gt; Machine-parseable schemas</p></li><li><p>Helpful error messages &gt; Structured error codes with recovery hints</p></li><li><p>Interactive tutorials &gt; Deterministic sandbox environments</p></li><li><p>Community forums &gt; Introspectable capability endpoints</p></li><li><p>SDK convenience methods &gt; Explicit predictable behavior</p></li></ul><p>The developer program of the future might measure: agent success rate on first API call, mean time to autonomous recovery, schema coverage percentage, and how often agents need to fall back to human intervention.</p><p>This doesn&#8217;t mean abandoning human developers. It means recognizing that the &#8220;developer&#8221; consuming your API might be Claude helping a human, or an autonomous agent in a pipeline, or a human who never reads your docs because their agent already understands the OpenAPI spec.</p><p><strong>The platforms that win will be the ones optimized for both.</strong> DIRECT principles are one attempt to codify what &#8220;optimized for agents&#8221; actually means.</p><h2>Concrete Example: Error Classification</h2><p>Let me show how DIRECT principles translate to real code.</p><p><strong>The problem:</strong> Different APIs return errors in different formats. An agent calling ElevenLabs gets different error structures than one calling Deepgram. Without standardization, agents need per-provider error handling logic.</p><p><strong>The solution:</strong> Unified error classification with 8 categories.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;go&quot;,&quot;nodeId&quot;:&quot;04317e33-15a4-4104-9530-f1029c1459c1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-go">// From omnivoice-core/resilience
type ErrorInfo struct {
  Category   ErrorCategory // transient, rate_limit, validation, auth, etc.
  Retryable  bool
  Code       string
  Message    string
  Suggestion string
  RetryAfter time.Duration
}</code></pre></div><p>Now an agent can make decisions programmatically:</p><pre><code>if err.IsRetryable() {
  time.Sleep(err.GetRetryAfter())
  // retry&#8230;
} else {
  log.Printf("Cannot retry: %s. Suggestion: %s",
  err.GetCode(), err.GetSuggestion())
}</code></pre><p>This is <strong>Recoverable</strong> in action. The agent doesn&#8217;t parse error strings &#8212; it receives structured, actionable metadata.</p><h2>The Website and Documentation</h2><p>I&#8217;ve published the full DIRECT framework at <strong><a href="https://grokify.github.io/direct-principles/">grokify.github.io/direct-principles</a>. </strong>The site includes:</p><ul><li><p><strong>Detailed principle definitions</strong> with examples and anti-patterns</p></li><li><p><strong>Compliance levels</strong> (AX-L1, AX-L2, AX-L3) for progressive adoption</p></li><li><p><strong>Case studies</strong> showing DIRECT applied across the tooling ecosystem</p></li><li><p><strong>Spectral rules</strong> via <a href="https://github.com/plexusone/ax-spec">ax-spec</a> to enforce DIRECT for OpenAPI specifications</p></li></ul><p>The case study on the <a href="https://grokify.github.io/direct-principles/case-studies/agent-tooling-ecosystem/">Agent Tooling Ecosystem</a> walks through how each tool applies specific principles.</p><h2>Why This Matters Now</h2><p>We&#8217;re at an inflection point. AI agents are moving from novelty to infrastructure. The companies and developers who figure out how to build agent-friendly interfaces will have a significant advantage. Consider:</p><ul><li><p><strong>APIs</strong> that agents can discover, call, and recover from errors automatically</p></li><li><p><strong>CLIs</strong> that agents can compose into pipelines without human intervention</p></li><li><p><strong>Documentation</strong> that machines can parse as effectively as humans can read</p></li><li><p><strong>SDKs</strong> with layers optimized separately for agent and human consumers</p></li></ul><p>This isn&#8217;t about replacing human developers. It&#8217;s about multiplying their effectiveness. In Q1, I shipped more than I ever have &#8212; not because I worked harder, but because agents could reliably handle more of the work.</p><p>The bottleneck was never the agent&#8217;s capability. It was always the interface.</p><h2>Getting Started</h2><p>If you want to apply DIRECT principles:</p><ol><li><p><strong>Start with one principle.</strong> Add `operationId` to every endpoint in your OpenAPI spec (Introspectable). Or ensure all errors return structured codes (Recoverable).</p></li><li><p><strong>Use ax-spec to audit.</strong> Run `vacuum lint &#8212; ruleset ax-spec/rules/ax-openapi.json your-api.yaml` to see where your API falls short.</p></li><li><p><strong>Design for the agent first.</strong> When adding a new endpoint or CLI command, ask: &#8220;Can an agent understand this without reading prose documentation?&#8221;</p></li><li><p><strong>Test with actual agents.</strong> The best validation is using Claude or GPT to interact with your interface. Where do they struggle? That&#8217;s where DIRECT principles apply.</p></li></ol><h2>Conclusion</h2><p>SOLID gave us a vocabulary for discussing object-oriented design. DIRECT aims to do the same for agent-facing interfaces.</p><p>The principles are:</p><ul><li><p><strong>D</strong>eterministic &#8212; Same input, same output, every time</p></li><li><p><strong>I</strong>ntrospectable &#8212; Machine-readable capabilities and schemas</p></li><li><p><strong>R</strong>ecoverable &#8212; Structured errors enable autonomous correction</p></li><li><p><strong>E</strong>xplicit &#8212; All constraints declared, nothing hidden</p></li><li><p><strong>C</strong>onsistent &#8212; Patterns that generalize across the interface</p></li><li><p><strong>T</strong>estable &#8212; Safe experimentation without consequences</p></li></ul><p>We&#8217;re early in the age of AI agents. The interfaces we build today will shape how effectively agents can augment human work tomorrow.</p><p>I believe that DIRECT principles &#8212; or something like them &#8212; will become as fundamental to agent-oriented development as SOLID is to object-oriented design.</p><p>The code, documentation, and tools are all open source. I&#8217;d love to hear what you think.</p><h2>Resources</h2><ul><li><p><a href="https://grokify.github.io/direct-principles/">DIRECT Principles (https://grokify.github.io/direct-principles/)</a> &#8212; Full documentation and case studies</p></li><li><p><a href="https://github.com/plexusone/ax-spec">AX Spec (https://github.com/plexusone/ax-spec</a>) &#8212; Spectral rules for OpenAPI compliance</p></li><li><p><a href="https://grokify.github.io/direct-principles/case-studies/agent-tooling-ecosystem/">Agent Tooling Ecosystem Case Study (https://grokify.github.io/direct-principles/case-studies/agent-tooling-ecosystem/)</a> &#8212; How DIRECT applies across 11 tools</p></li><li><p><a href="https://github.com/plexusone">PlexusOne (https://github.com/plexusone)</a> &#8212; Organization for agent tools and SDK integrations</p></li><li><p><a href="https://github.com/plexusone/multi-agent-spec">Multi-Agent Spec (https://github.com/plexusone/multi-agent-spec)</a> &#8212; Specification for defining agent teams and workflows</p></li><li><p><a href="https://plexusone.dev/integrations/">PlexusOne Integrations (https://plexusone.dev/integrations/)</a> &#8212; 25+ integrations across LLMs, voice, search, and infrastructure</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.AI! 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[7 Techniques for Scaling AI Usage (after creating 1M LOC)]]></title><description><![CDATA[How I used AI to publish over 1M LOC to public Github projects in Q1]]></description><link>https://www.johnwang.ai/p/7-techniques-for-scaling-ai-usage</link><guid isPermaLink="false">https://www.johnwang.ai/p/7-techniques-for-scaling-ai-usage</guid><dc:creator><![CDATA[John Wang]]></dc:creator><pubDate>Thu, 09 Apr 2026 14:16:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!elAx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Like many people I&#8217;ve been using quite a bit of AI for development, dramatically increasing since late 2025. However, one thing that may be different is that I surpassed 1 million (1,006,958 to be exact) public GitHub net lines of code across 300+ releases in 120+ projects in Q1 (Jan-March 2026). LOC is debated as a worthwhile metric, but the effort was worthwhile enough that I decided to write my thoughts on how I manage to maintain and ship that volume of code. And while LOC may not be the best measure of productivity, it&#8217;s still 1 million lines of code, that Claude is in charge of that. Most of the time, I just ask Claude to build things for me and it will do it on its own, autonomously. Here are the 7 techniques that I use to make this happen, described in sections below.</p><ol><li><p>Release Management</p></li><li><p>Agent Selection</p></li><li><p>Agent Empowerment</p></li><li><p>Agent Orchestration</p></li><li><p>Spec-Driven Development</p></li><li><p>Everything-as-Code</p></li><li><p>Scaling Human Oversight</p></li></ol><p>My efforts were noted by ChatGPT which granted me a &#8220;<strong>Most Likely to Automate Their Own Brainstorm&#8221;</strong> recognition for 2025. The rest of the article describes my current approach for this, which includes references to tools I built to accelerate and sustain that acceleration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!elAx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!elAx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 424w, https://substackcdn.com/image/fetch/$s_!elAx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 848w, https://substackcdn.com/image/fetch/$s_!elAx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!elAx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!elAx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5470572,&quot;alt&quot;:&quot;&quot;,&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.vibeminds.ai/i/193613727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!elAx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 424w, https://substackcdn.com/image/fetch/$s_!elAx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 848w, https://substackcdn.com/image/fetch/$s_!elAx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!elAx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa553375-268f-467a-bc15-7fea1ce20cf9_1800x1800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">ChatGPT &#8220;Most Likely to Automate Their Own Brainstorm&#8221; Annual Superlative</figcaption></figure></div><p>It&#8217;s worth noting that these contributions were all for my own projects, and while these are all open source, I haven&#8217;t promoted them as I&#8217;m too busy doing my own building and I&#8217;m the primary user/persona for these projects at the moment. These projects are in various states with some actively used in production, some used as prototypes, and others not used at all yet. If you want to use any of the projects, feel free to ask me about them. I&#8217;m also highlighting some of the projects throughout the article which are more mature.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.AI! 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><h1>Release Management</h1><p>The number one, foundational technique is not an AI technique, but the ability to manage projects at scale. To drive 1M+ additions in 120+ projects across 300+ releases, release management is a necessary foundation. For me, this consists of git, tests, and CI/CD pipelines. My default pipelines cover build, test, and SAST scanning, with SCA being covered by automated Dependabot pull requests.</p><p>With 120+ projects this level of working with AI, it&#8217;s more important to to have a systems mindset on how the libraries will interfaces with and depend on each other there are many libraries, CLIs, and MCP servers which are interconnected.</p><p>For my friends and colleagues finding the freedom of AI-powered development, git is one of the first things I tell my friends they need to adopt if they haven&#8217;t already. And a great thing about AI, is that it can help do this as well.</p><p>Of note, one reason I&#8217;m able to publish so many projects is that my projects are primarily in Go which uses git as it&#8217;s package manager, so I don&#8217;t need to publish to package managers like NPM, PyPi, Maven, NuGet, Ruby Gems or other systems. A simple git tag is recognized as a Go release. That being said, pipelines can be added to automatically push to those package managers.</p><h1>Agent Selection</h1><p>I&#8217;ve found it important to have an &#8220;AI-Team&#8221; to accelerate, which is a team of agents that you are very comfortable working with. There are 100s of AI services and tools available to choose from so choose wisely.</p><p>These are the ones I use now. You should try many AI agents and tools to identify the ones that can accelerate your development the most.</p><ul><li><p>Claude Code: I use Claude Code for ideation refinement and implementation. It is my execution partner for turning ideas into projects. </p></li><li><p>ChatGPT: For ideation, I use ChatGPT and imagineering research partner. It feels super fast which is what I want for ideation, and doesn&#8217;t consume my Claude tokens which I want to save for implementation.</p></li><li><p>Canva: This is my partner for marketing-ready vector diagrams. I use the AI Code function to generate SVG diagrams that I then incorporate into my applications. For non-marketing diagrams, I use Claude Code with Mermaid or D2 diagrams.</p></li></ul><h1>Agent Empowerment</h1><p>After building the &#8220;AI-Team&#8221;, it&#8217;s important to work with them and empower them to make them more effective. There are many ways to accelerate work with agents including skills, hooks, MCP servers, and other tools.</p><p>AI-assisted development is rapid enough the roadmap for such tools is emergent rather than planned. If I feel like I need or just want a tool, it&#8217;s easy enough to spin up a parallel AI session to build it, and then incorporate it into the workflow.. Development of these tools is fast enough that it can be done concurrently with the implementer project.</p><p>My personal preference is to create code that can live in source control so I tend to empower my agents with CLI and MCP server tools. Here are some examples:</p><ol><li><p><a href="https://github.com/grokify/videoascode">videoascode</a>: This is project to create video files that are currently either Marp Markdown presentations or webapp demos. This supports speech-to-text and subtitles in multiple languages. Navigating slides and web apps, along with syncing with audio and subtitles, were not that straight forward, so even though both the Marp slides and voiceover text can be AI-assisted, it was important to build a reusable, tested, tool for this.</p></li><li><p><a href="https://github.com/plexusone/w3pilot">w3pilot</a>: This is my browser automation MCP server and CLI with 150+ tools. It uses both ChromeDevTools protocol and the BiDi protocol. In addition to having more tools than some other approaches, it has a simple deployment approach for CI/CD pipelines since it is built in Go.</p></li><li><p><a href="https://github.com/grokify/structured-changelog">structured-changelog</a>: My first highly used CLI tool was a tool to help LLMs build consistent changelogs which I wanted to track my releases. While LLMs can build changelogs directly, often times the format will change so this project is designed to have structured changelogs so that they are always formatted the same way. And while there are other changelog tools, they are built deterministically from git log and not with LLM judgement for terminology.</p></li></ol><p>Some thoughts on this:</p><ol><li><p><strong>Emergent:</strong> While I know the high level direction I want to head, I may not have all the details which get filled in as I go. If I feel like I need a project or tool to accelerate my work, I&#8217;ll built it, and then use it moving forward at an accelerated velocity. In the past, this felt more like a detour, but with AI running many parallel projects, I spin up a parallel project, finish that project, and then move forward at a faster velocity.</p></li><li><p><strong>Future Development:</strong> Ideas and code generation are not slow for me. Acceptance testing is slow because that requires me, the human, to be involved right now. I have numerous projects with multiple months and releases of development that I haven&#8217;t used. The idea is that when my human capacity has freed up to do review, many rounds of ideation and implementation have already occurred. </p></li><li><p><strong>Aggressive Release Schedule:</strong> I ship a lot of releases, an average of 100 per month, and 304 for Q1. I view releases as &#8220;compacting&#8221; AI development because a release comes with CI/CD pipeline checks, documentation, release notes, and changelog. The release packages existing development so it&#8217;s easier to move on with future development.</p></li></ol><h1>Agent Orchestration</h1><p>A key part of how I scale effort is via subagents, which can be thought of as composable prompts that can be put into workflows. A powerful thing is that they can even be called multiple times within a single workflow, such as times where I&#8217;ve had agents build a <strong>Subagent Pipeline</strong> with over 250 agent iterations working on a large code base in a map-reduce manner. Each agent iteration is designed to have enough capacity for its context window.</p><p>To scale agent building, I invested time building out <a href="https://github.com/plexusone/multi-agent-spec">Multi-Agent Spec</a> to create a single canonical data structure for defining agents and agent tables from which I autogenerate agent definition files for Claude Code, AWS Kiro CLI, and others. While I have a <a href="https://plexusone.dev/academy/building-subagents">65 slide presentation</a> on how to do this, my approach to build agents now a few simple steps to my agent:</p><ol><li><p>read the multi-agent spec directory to create agent specs in the specs/ directory</p></li><li><p>create the agent files using <a href="https://github.com/plexusone/assistantkit">AssistantKit</a> in the plugins/ directory</p></li><li><p>review the <a href="https://github.com/plexusone/agent-team-release">Release Agent Team</a> as a 1 shot example</p></li><li><p>load the agents from the plugins/ directory into the place the AI agent expects</p></li></ol><p>I originally searched for existing agent-system agnostic specifications and found one but it was not widely adopted and it was not very Go friendly (as determined by <a href="https://github.com/grokify/schemalint">schemalint</a>) so I built my own.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Eft6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Eft6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 424w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 848w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 1272w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Eft6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:797725,&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.vibeminds.ai/i/193613727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.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_!Eft6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 424w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 848w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 1272w, https://substackcdn.com/image/fetch/$s_!Eft6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fcd03b1-473e-4fdb-a2ff-45b47c4cf691_3456x2234.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://github.com/plexusone/agentplexus">AgentPlexus</a> viewer for <a href="https://github.com/plexusone/multi-agent-spec">Multi-Agent Spec</a> defined agent teams</figcaption></figure></div><h1>Spec-Driven Development</h1><p>I use spec-driven development (SDD) extensively along with documentation. My approach uses the following documents with the MRD (market requirements document) being optional, but for large projects, I&#8217;ll almost always have a PRD (product requirements document) and TRD (technical requirements document).</p><ul><li><p>MRD.md - market requirements</p></li><li><p>PRD.md - product requirements - includes UX</p></li><li><p>TRD.md - technical requirements - includes testing</p></li><li><p>PLAN.md</p></li><li><p>TASKS.md</p></li><li><p>docs/design/FEAT_&lt;feature_name&gt;_{PRD|TRD|PLAN}.md</p></li></ul><p>While a single human can build out all the specs, in a multi-person project, aka AI DLC (Development Livecycle) Mob-style team, it may be useful to have each human own their area of the requirements which can be provided to the AI agent to create the plan and tasks.</p><ul><li><p>MRD = Product Marketing</p></li><li><p>PRD = Product Management</p></li><li><p>URD = UX Design</p></li><li><p>TRD = Engineering</p></li></ul><p>Separate requirements documents stems from the pre-AI development world, but I still prefer the separation of concerns. This separation doesn&#8217;t exist with other SDD approaches including AWS SDD (Kiro) approach and the GitHub SDD approach (Spec Kit) which use the following files:</p><p>AWS SDD (Kiro)</p><ul><li><p>requirements.md - product requirements</p></li><li><p>design.md - UX and engineering design</p></li><li><p>tasks.md</p></li></ul><p>GitHub SDD (Spec Kit)</p><ul><li><p>spec.md:</p></li><li><p>plan.md:</p></li><li><p>tasks.md:</p></li><li><p>tasks/</p></li></ul><h1>Everything-as-Code</h1><p>AI assistants are great handling code in the form of text files, so doing everything &#8220;as-code&#8221; which can be actual programming code or other forms of text files can accelerate agent management. I tend to prioritize an everything-as-code approach as much as I can per the following:</p><ul><li><p>Requirements: Markdown</p></li><li><p>Apps: programming language</p></li><li><p>API definitions: OpenAPI spec</p></li><li><p>Interfaces: JSON schema</p></li><li><p>Image: SVG (XML)</p></li><li><p>Documentation: MkDocs, Hugo</p></li><li><p>Agent Teams: Multi-Agent Spec</p></li><li><p>Evaluations: LLM-as-a-Judge reports</p></li><li><p>Deployment: Terraform, Cloud Formation, CDK, Pulumi</p></li><li><p>Presentations: Marp, Reveal.js</p></li></ul><p>Of note, when defining interfaces, I optimize for statically typed languages like Go and TypeScript and avoid creating interfaces that are hard to represent. To check this, I created <a href="https://github.com/grokify/schemalint">schemalint</a> to verify that JSON schemas are statically-typed language friendly which enables easier code generation which I do with Go structs and Zod schemas for TypeScript.</p><h1>Scaling Human Oversight</h1><p>Once you are calling one terminal session, the natural inclination is to add terminal sessions so you can multi-task. This is a natural evolution because implementation will take some time, so the natural inclination is to do several projects in parallel. This evolution is described in the Evolution of the Programmer from 2024-2026 diagram from Nano Banana (courtesy of Steve Yegge).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Me27!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Me27!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 424w, https://substackcdn.com/image/fetch/$s_!Me27!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 848w, https://substackcdn.com/image/fetch/$s_!Me27!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Me27!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Me27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png" width="1400" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1387510,&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.vibeminds.ai/i/193613727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.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_!Me27!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 424w, https://substackcdn.com/image/fetch/$s_!Me27!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 848w, https://substackcdn.com/image/fetch/$s_!Me27!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 1272w, https://substackcdn.com/image/fetch/$s_!Me27!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab96b343-ebdd-4108-8886-c07c596923d9_1400x764.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The 8 Stages of Dev Evolution To AI by Nano Banana</figcaption></figure></div><p>At some time Figure 7 becomes very hard to manage because I found myself clicking around in multiple windows which may not always be visible at the same time. I was doing this with many terminal tabs and several terminal windows before moving to tmux panes and finally deciding to take some time to build my own tiling windows manager, which is now available as the <a href="https://plexusone.dev/applications/plexusone-app">PlexusOne App</a>, a macOS app built in Swift. While this app is still very new and has some quirks, it has quickly become my always on AI agent interface, allowing me to interact with Claude Code, Kiro CLI, Codex CLI, Gemini CLI and others via tmux sessions. I created the following 4x3 diagram for demonstration purposes, but I will typically use 3x2 or 3x1 layouts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YoSY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YoSY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 424w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 848w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YoSY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226679,&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.vibeminds.ai/i/193613727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.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_!YoSY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 424w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 848w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!YoSY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584a9fdb-bebd-4054-8783-5373a2d5451c_2557x1439.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://github.com/plexusone/plexusone-app">PlexusOne app for macOS</a></figcaption></figure></div><p>While the macOS app has dramatically improved my laptop experience, I&#8217;m also working on a mobile app, but it&#8217;s not quite usable yet. While I found quick success on macOS desktop, there are two mobile app (Swift and Flutter) but neither is usable yet.</p><h1>What&#8217;s Next?</h1><p>With over 1M commits in Q1, the natural question is what&#8217;s next and will I be able to maintain this pace. The answer to the latter is that that my commits are already going down when viewing the commits-per-month metric. This is because my agent stack is being built out so I can focus on the things on top of the platform. Additionally, there are less new projects and more effort on improving existing projects, some of which have over 10 releases now.</p><ul><li><p>January 2026 - 450,609</p></li><li><p>February 2026 - 289,943</p></li><li><p>March 2026 - 266,406</p></li></ul><p>From a project type perspective, many of these projects are libraries, CLI apps, and MCP servers. Moving forward as this level of projects get filled out, different types of apps will be built on top.</p><p>What do you build and how do you build it? Do these techniques resonate with you?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.AI! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Agent Leadership: Why Shipping Software in the AI Era Is a Coordination Problem]]></title><description><![CDATA[AI has fundamentally changed how software gets built.]]></description><link>https://www.johnwang.ai/p/agent-leadership-why-shipping-software</link><guid isPermaLink="false">https://www.johnwang.ai/p/agent-leadership-why-shipping-software</guid><dc:creator><![CDATA[John Wang]]></dc:creator><pubDate>Wed, 14 Jan 2026 09:35:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WPRv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>TL;DR</h2><ul><li><p>AI makes starting software projects trivial, but finishing them is now the hard problem.</p></li><li><p>The bottleneck isn&#8217;t code quality &#8212; it&#8217;s coordination, accountability, and release readiness.</p></li><li><p>This creates a new role: the <strong>Agent Leader</strong>, responsible for orchestrating agent teams.</p></li><li><p>The <strong>Release Agent Team</strong> models this with six agents (Coordinator, PM, QA, Docs, Security, Release Manager) that enforce a real Definition of Done.</p></li><li><p>Finishing reliably in the AI era requires better agent leadership, not better prompts.</p></li></ul><div><hr></div><p>Starting projects has never been easier. With modern coding assistants, you can spin up a working prototype in minutes. Features, refactors, tests, even documentation drafts appear almost instantly.</p><p>And yet&#8212;most AI-assisted projects stall.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.AI! 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>They don&#8217;t fail spectacularly. They just&#8230; never quite finish.</p><p>This isn&#8217;t a tooling problem. It&#8217;s a leadership problem.</p><div><hr></div><h2>The AI-Start / Human-Finish Gap</h2><p>What AI excels at:</p><ul><li><p>Generating code</p></li><li><p>Suggesting fixes</p></li><li><p>Drafting tests</p></li><li><p>Writing documentation</p></li></ul><p>What it struggles with:</p><ul><li><p>Knowing when something is <em>done</em></p></li><li><p>Coordinating across domains</p></li><li><p>Enforcing quality gates</p></li><li><p>Sequencing work into a real release</p></li></ul><p>So we end up with a familiar pattern:</p><ul><li><p>Code mostly works</p></li><li><p>Tests are partial</p></li><li><p>Docs are &#8220;TODO&#8221;</p></li><li><p>Security checks are postponed</p></li><li><p>Releases are delayed or rushed</p></li></ul><p>AI made starting cheap. <strong>Finishing became expensive.</strong></p><div><hr></div><h2>Why This Is a Leadership Shift, Not a Productivity Issue</h2><p>Historically, shipping software was about managing people:</p><ul><li><p>assigning tasks</p></li><li><p>reviewing work</p></li><li><p>coordinating handoffs</p></li></ul><p>In AI-first workflows, much of the execution is handled by agents.</p><p>The new bottleneck isn&#8217;t execution.<br>It&#8217;s <strong>coordination, accountability, and definition of done</strong>.</p><p>This creates a new role that many teams haven&#8217;t named yet:</p><blockquote><p><strong>The Agent Leader</strong></p></blockquote><p>An Agent Leader doesn&#8217;t write every line of code.<br>They design the system of agents, define responsibilities, and enforce gates that turn output into outcomes.</p><div><hr></div><h2>Agent Leadership Means Building Agent Teams</h2><p>One way to think about this is simple:</p><blockquote><p>If you wouldn&#8217;t trust a single human to do everything, why trust a single agent?</p></blockquote><p>Real teams specialize. Agent teams should too.</p><p>A concrete example of this idea is the <strong>Release Agent Team</strong>:<br><a href="https://github.com/grokify/release-agent">https://github.com/grokify/release-agent</a></p><p>It models the release process as a <strong>six-agent team</strong>, each representing a real-world responsibility.</p><div><hr></div><h2>The Six Agents That Make Finishing Deterministic</h2><h3>1. Release Coordinator</h3><p>The leader and orchestrator.<br>This agent doesn&#8217;t do the work&#8212;it ensures <em>all other agents</em> have passed and sequences the release correctly. Final go/no-go lives here.</p><h3>2. PM Agent</h3><p>Defines intent:</p><ul><li><p>scope of the release</p></li><li><p>semantic versioning</p></li><li><p>breaking changes</p></li><li><p>what the release <em>means</em></p></li></ul><p>Without this, releases drift or become arbitrary.</p><h3>3. QA Agent</h3><p>Owns correctness:</p><ul><li><p>builds</p></li><li><p>tests</p></li><li><p>linting</p></li><li><p>runtime checks</p></li></ul><p>This prevents &#8220;it works on my machine&#8221; from becoming a release.</p><h3>4. Documentation Agent</h3><p>Owns clarity:</p><ul><li><p>changelog completeness</p></li><li><p>release notes</p></li><li><p>README and user-facing docs</p></li></ul><p>If users can&#8217;t understand the release, it isn&#8217;t done.</p><h3>5. Security Agent</h3><p>Owns safety:</p><ul><li><p>dependency vulnerabilities</p></li><li><p>license compliance</p></li><li><p>secret leaks</p></li><li><p>security posture</p></li></ul><p>Security isn&#8217;t a follow-up task&#8212;it&#8217;s a release gate.</p><h3>6. Release Manager Agent</h3><p>Owns mechanics:</p><ul><li><p>git hygiene</p></li><li><p>CI readiness</p></li><li><p>version availability</p></li><li><p>tagging and pushing</p></li></ul><p>This ensures the release process itself is correct and repeatable.</p><p>Together, these agents enforce a <strong>real Definition of Done</strong>.</p><p>Here are some real examples of team status:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WPRv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WPRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 424w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 848w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 1272w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WPRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png" width="1166" height="1492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1492,&quot;width&quot;:1166,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:727328,&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.vibeminds.ai/i/184527376?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.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_!WPRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 424w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 848w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 1272w, https://substackcdn.com/image/fetch/$s_!WPRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3020f78-9f31-47bd-8154-61a5a12949b8_1166x1492.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jSTF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jSTF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 424w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 848w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 1272w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jSTF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png" width="1024" height="418" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:235107,&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.vibeminds.ai/i/184527376?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.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_!jSTF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 424w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 848w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 1272w, https://substackcdn.com/image/fetch/$s_!jSTF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35a3de6-121f-4c7e-9a18-69bd905787d9_1024x418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>Why This Matters Beyond Releases</h2><p>The release process is just a starting point.</p><p>What this really demonstrates is a pattern:</p><ul><li><p>AI agents are powerful specialists</p></li><li><p>Specialists need coordination</p></li><li><p>Coordination requires explicit leadership</p></li></ul><p>This applies to:</p><ul><li><p>product development</p></li><li><p>research pipelines</p></li><li><p>infrastructure changes</p></li><li><p>documentation systems</p></li><li><p>even non-software workflows</p></li></ul><p>The teams that succeed won&#8217;t be the ones with the best prompts.<br>They&#8217;ll be the ones with the <strong>best agent architecture</strong>.</p><div><hr></div><h2>The New Skill Curve</h2><p>In the AI era:</p><ul><li><p>Junior engineers learn prompting</p></li><li><p>Senior engineers learn <strong>Agent Leadership</strong></p></li></ul><p>That means:</p><ul><li><p>designing agent roles</p></li><li><p>defining responsibilities</p></li><li><p>setting pass/fail criteria</p></li><li><p>orchestrating workflows</p></li><li><p>knowing when something is truly finished</p></li></ul><div><hr></div><h2>The Takeaway</h2><p>AI didn&#8217;t eliminate leadership.<br>It raised its abstraction level.</p><p>The future of software delivery isn&#8217;t about writing more code faster.<br>It&#8217;s about <strong>leading agent teams that can reliably finish what they start</strong>.</p><p>If you&#8217;re curious what that looks like in practice:<br><a href="https://github.com/grokify/release-agent">https://github.com/grokify/release-agent</a></p><p>This isn&#8217;t the final form&#8212;but it&#8217;s a glimpse of what Agent Leadership can become.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 VibeMinds.AI! 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[The Age of Fully Capable AI Agents Is Here — Now It’s Time to Harness Their Power]]></title><description><![CDATA[Build fast. Lead forward. Vibe code the future.]]></description><link>https://www.johnwang.ai/p/the-age-of-fully-capable-ai-agents</link><guid isPermaLink="false">https://www.johnwang.ai/p/the-age-of-fully-capable-ai-agents</guid><dc:creator><![CDATA[John Wang]]></dc:creator><pubDate>Mon, 11 Aug 2025 02:39:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1yjx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI can now do almost anything&#8212;write content, drive cars, build robots, even code apps from scratch. And it&#8217;s not creeping in quietly. The change is fast, disruptive, and already shaking up industries.</p><p>Once, AI&#8217;s work needed human review and polish. Now? Entire workflows can be handed over to AI agents&#8212;no expert oversight required.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 JohnWang.ai! 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><strong>Vibe Coding: From Concept to Cash</strong></h2><p>Software development used to demand years of training. Talent was scarce. Deadlines slipped. Over the past six months, though, a new reality has emerged: for certain projects, you don&#8217;t need a developer at all.</p><p>Enter the &#8220;Vibe PM.&#8221; First came the Product Engineer&#8212;combing Product Management and Engineering expertise. Now comes the Product Manager who codes through AI&#8212;Vibe Coding. It&#8217;s the art of building apps by guiding AI agents, not typing every line of code yourself.</p><h2><strong>The Prediction: Product Management Will Never Be the Same</strong></h2><p>Tech leaders have been sounding the alarm:</p><ol><li><p><a href="https://substack.com/home/post/p-151734528">Why the next great PM will be a Product Engineer</a> - November 16, 2024</p></li><li><p><a href="https://medium.com/@falkgottlob/the-rise-of-the-ai-product-engineer-redefining-product-development-through-end-to-end-ownership-bedefd22c703">The Rise of the AI Product Engineer: Redefining Product Development Through End-to-End Ownership</a> - November 21, 2024</p></li><li><p><a href="https://www.news.aakashg.com/p/pm-isnt-going-to-exist">Product Management isn&#8217;t going to exist in 5 years - 2x CPO</a> - February 18, 2025</p></li><li><p><a href="https://www.pendo.io/pendo-blog/the-vibe-pm-and-the-evolution-of-product-management/">The &#8216;vibe PM&#8217; and the evolution of product management </a>- March 27, 2025</p></li></ol><h2><strong>The Reality: Millions Made in Months</strong></h2><p>Predictions are theory. Deals are proof.<br>In just six months, Base44 founder Maor Shlomo built and sold his solo-owned, vibe-coded startup to Wix for <strong>$80 million in cash</strong>. Twitter co-founder Jack Dorsey vibe-coded his latest messaging app. And Aha!&#8212;the product roadmapping giant&#8212;just launched its own AI-built prototypes.</p><ol><li><p><a href="https://techcrunch.com/2025/06/18/6-month-old-solo-owned-vibe-coder-base44-sells-to-wix-for-80m-cash/">6-month-old, solo-owned vibe coder Base44 sells to Wix for $80M cash</a> - June 18, 2025</p></li><li><p><a href="https://www.businessinsider.com/jack-dorsey-bitchat-app-vibe-coded-2025-7">That new Jack Dorsey messaging app? He vibe-coded it</a> - July 10, 2025</p></li><li><p><a href="https://www.aha.io/blog/the-new-aha-ai-assistant-will-change-how-you-build-products">The new Aha! AI assistant will change how you build products</a> - July 16, 2025</p></li></ol><h2><strong>Lovable: The Fastest to $100M&#8212;Ever</strong></h2><p>Driving this AI revolution is <strong>Lovable</strong>, the vibe-coding platform rewriting the rules of software creation. It rocketed from $1 million to $100 million in revenue faster than any other company&#8212;beating even AI heavyweights like Cursor and OpenAI.</p><p>Lovable turns app development into a conversation. You chat with its AI agent, describe what you want, and it builds the app for you&#8212;code, features, and all. No IDE. No syntax errors. Just your ideas, instantly alive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1yjx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1yjx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 424w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 848w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 1272w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1yjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png" width="1456" height="993" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:993,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1yjx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 424w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 848w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 1272w, https://substackcdn.com/image/fetch/$s_!1yjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7994a14-ee2d-4b96-910f-6ab518b4f93b_3300x2250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And according to its website, that revenue is coming from <strong>over 500,000 users</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xl6e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xl6e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 424w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 848w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 1272w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xl6e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png" width="1232" height="302" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/edd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:302,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xl6e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 424w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 848w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 1272w, https://substackcdn.com/image/fetch/$s_!Xl6e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedd24d39-f0b0-4509-aa1b-1495f65b8b9b_1232x302.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>So&#8230; What&#8217;s It Like to Build with Lovable?</strong></h2><p>After exploring different vibe-coding platforms, I chose <strong>Lovable</strong> for my next experiment. I&#8217;d already built smaller vibe-coded projects&#8212;CI/CD pipelines, MCP servers&#8212;but this time I wanted to go bigger: a real, production-ready web app live on the internet.</p><p>Lovable gives you a chat interface powered by an LLM and integrates with services like GitHub and Supabase. I decided to skip the technical decision-making entirely&#8212;no debating frameworks or libraries&#8212;just feed it requirements and let Lovable choose the best implementation.</p><p>Six hours after dinner, my new app&#8212;<strong>VibeFlux.dev</strong>&#8212;was live. A fully functional MVP with Google and GitLab SSO, WCAG 2.3 AA accessibility, core features, and even some extras. I had it implement:</p><ul><li><p>A <strong>light/dark mode</strong> with six additional color themes, each in light and dark variations.</p></li><li><p>A <strong>multi-type reaction system</strong> like LinkedIn&#8217;s.</p></li></ul><p>All I did was provide requirements and run acceptance tests&#8212;classic Product Manager territory. The result? An incredible launch experience.</p><div class="pullquote"><p><em><strong>If a PM with zero hands-on coding in the build process can launch a production app in one night, the definition of product management isn&#8217;t just evolving&#8212;it&#8217;s being rewritten in real time.</strong></em></p></div><h2><strong>Join the Revolution&#8212;Start Vibe Coding Today</strong></h2><p>This AI-driven transformation isn&#8217;t waiting&#8212;and neither should you. Stop watching from the sidelines. Dive in, experiment, and start building with vibe coding right now. The future belongs to those who create it. So grab the tools, unleash your ideas, and lead the charge into the next era of product management. The wave is here. Catch it&#8212;today.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/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 VibeMinds.ai! 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[Welcome to my Blog]]></title><description><![CDATA[Master the art and science of building tomorrow&#8217;s tech.]]></description><link>https://www.johnwang.ai/p/coming-soon</link><guid isPermaLink="false">https://www.johnwang.ai/p/coming-soon</guid><dc:creator><![CDATA[John Wang]]></dc:creator><pubDate>Sun, 28 Jul 2024 00:51:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N37-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ccd44-57e9-442d-a32e-82fe4f8b5194_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Humanity has entered a new era &#8212; the AI Age &#8212; where advanced AI is now broadly available to people in their everyday lives, even to those who haven&#8217;t spent a career studying or building it. In many ways, ChatGPT is like the Ford Model T: democratizing technology for the everyday person.</p><p>AI hasn&#8217;t just been democratized for end users &#8212; it&#8217;s also now accessible to companies offering services. No longer do you need to compete for a handful of PhD-level AI researchers to create a revolutionary new product.</p><p>With this explosion in productivity, everything &#8212; from understanding, to using, to enabling, to governing &#8212; is evolving at lightning speed. JohnWang.AI is here to explore these changes, because we all need to become lifelong learners&#8230; and fast!</p><p><strong>What you&#8217;ll find here:</strong></p><ul><li><p>Deep dives into AI trends and applications</p></li><li><p>Practical guides and best practices for product management and engineering</p></li><li><p>Stories and strategies from industry leaders shaping the future</p></li><li><p>Tools, tips, and tricks to level up your craft</p></li></ul><p>Join us in transforming code and concepts into real-world magic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.johnwang.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.johnwang.ai/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>