<?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[Enterprise Technology & Excel Exorcism]]></title><description><![CDATA[Hands-on technology analysis. And the TLDR comic. Download my exclusive AI-engineering review on signup. ]]></description><link>https://www.etx2.net</link><image><url>https://substackcdn.com/image/fetch/$s_!U4wg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f34ef49-6ea1-46fd-accd-5e56fe71bb14_720x720.png</url><title>Enterprise Technology &amp; Excel Exorcism</title><link>https://www.etx2.net</link></image><generator>Substack</generator><lastBuildDate>Fri, 30 Oct 2026 22:31:23 GMT</lastBuildDate><atom:link href="https://www.etx2.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Konrad Pfeffer]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[konrad@etx2.net]]></webMaster><itunes:owner><itunes:email><![CDATA[konrad@etx2.net]]></itunes:email><itunes:name><![CDATA[Konrad Pfeffer]]></itunes:name></itunes:owner><itunes:author><![CDATA[Konrad Pfeffer]]></itunes:author><googleplay:owner><![CDATA[konrad@etx2.net]]></googleplay:owner><googleplay:email><![CDATA[konrad@etx2.net]]></googleplay:email><googleplay:author><![CDATA[Konrad Pfeffer]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Junior Jobs Disappear. The Need for Seniors Doesn’t.]]></title><description><![CDATA[Building larger projects with AI has changed how I think about enterprise teams&#8212;and raised an uncomfortable question about talent.]]></description><link>https://www.etx2.net/p/the-junior-jobs-disappear-the-need</link><guid isPermaLink="false">https://www.etx2.net/p/the-junior-jobs-disappear-the-need</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Fri, 30 Oct 2026 08:57:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U4wg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f34ef49-6ea1-46fd-accd-5e56fe71bb14_720x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Code is cheap nowadays, people say. And indeed, agentic coding support makes building a large software system much faster. When done right, of course. In my previous <a href="https://www.etx2.net/p/after-the-honeymoon-lessons-from">article</a>, I looked into the effects of a na&#239;ve approach to agentic coding.</p><p>Traditional software teams in larger enterprise projects often followed a pyramid organization: a few seniors in responsible roles on top, and maybe 2/3 mid-level and junior engineers. The press has written a lot recently about how AI is reshaping the entry-level job market. In the last few days, there was an announcement that Microsoft plans severance offers for 60.000 employees, mostly in the technical parts of their business worldwide.</p><p>Today I want to look at what others say about what modern engineering teams look like. I also want to tackle the uncomfortable question: When AI replaces entry-level jobs, how do we get the seniors needed to run the agents?</p><h1><strong>Effects seen today</strong></h1><p>Quite a few articles and studies have been published recently from players like <a href="https://www.bain.com/insights/the-half-finished-redesign-how-ai-reshapes-software-organizations-technology-report-2026/">Bain &amp; Company</a>, <a href="https://www.gartner.com/en/articles/software-engineering-tiny-teams">Gartner</a>, or <a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/beyond-the-copilot-scaling-the-agentic-product-development-life-cycle">McKinsey</a>.</p><p>They largely come to similar conclusions.</p><h2><strong>Team Size Compression</strong></h2><p>McKinsey say that in top-accelerating organizations (in terms of agentic coding), 79% of the organizations they interviewed reported that squad size decreased. The median of the survey was a reduction from about 10 to 7 members. Bain reported that in their survey teams shrunk to &#8220;pods of 3-5 people&#8221;, with routine execution roles disappearing.</p><p>Gartner thinks the total number of teams will increase to meet growing business demand, but with what they call &#8220;tiny teams.&#8221;</p><h2><strong>The Seniority Inversion</strong></h2><p>Bain see the traditional pyramid in organizations flattening rapidly: &#8220;Fewer engineering organizations report traditional pyramid structures, down from 66% to 29%. Fluency with AI tools is now the leading capability sought out in engineers; cited by 62% of survey respondents&#8221;.</p><p>The effects of this is obvious: When fewer entry-level jobs are created, how to find or train the seniors the companies desperately need?</p><blockquote><p><em>&#8220;Companies need more senior judgment than ever, yet they are quietly dismantling the path that produced it.&#8221; &#8212; Bain, 2026</em></p></blockquote><p>The routine coding, debugging, and testing tasks that junior engineers historically learned on are precisely the tasks agents now handle. Without deliberate intervention, the supply of future senior engineers is threatened.</p><p>The junior talent pipeline crisis might even influence whether young talent decide for computer science at university, enforcing the shortage even more.</p><h2><strong>Emerging and Evolving Roles</strong></h2><p>Companies <a href="https://www.forrester.com/blogs/ai-is-rewriting-software-work-what-it-means-for-your-team/">Forrester</a> or <a href="https://www.thoughtworks.com/insights/articles/preparing-your-team-for-agentic-software-development-life-cycle">Thoughtworks</a> describe that new roles appear in organizations:</p><blockquote><ul><li><p>AI Engineer / Agent Reliability Engineer: Manages agent tooling, configures coding assistants, builds agent workflows, maintains evals that catch agent-generated bugs</p></li><li><p>Knowledge Architect: Designs and maintains the shared knowledge layer (memory, context) that agents consume</p></li><li><p>Agentic Architect: Designs the multi-agent system architecture and orchestration patterns</p></li><li><p>AI Conductor / Orchestrator: Guides agents, composes workflows, enforces guardrails &#8212; the &#8220;manager of AI agents&#8221;</p></li><li><p>Evaluation/Governance Engineer: Builds policy-as-code, audit harnesses, and compliance validation for agent outputs</p></li></ul></blockquote><p>Traditional roles like developer, UX designer will be shifted towards directing agents. In general, the expectation is that job boundaries start blurring significantly and team members take on a broader range of tasks.</p><h2><strong>Bottleneck Migration</strong></h2><p>While traditional projects very often had code production as their bottleneck, other roles will be in focus: Product Managers will much more rapidly have to decide on the product direction and design, while quality assurance and code reviews need to keep up with the new development speed. As more products go into production, decision-making and accountability will be the next challenges to solve.</p><h1><strong>Facing the talent pipeline crisis</strong></h1><p>So, what&#8217;s the best way to find seniors for the new age of agentic coding? Obviously, you can try to recruit on the free market. I expect seniors who meet modern skill requirements will see their salary expectations go through the roof for good reasons. They will be key players in modern teams and key to the velocity multiples companies expect.</p><p>At my former company, we recruited working students early in their university careers and taught them our technology stacks. But it still comes down to how you select talent and what opportunities you give them to learn in real-world situations. We were a smaller company, so we were used to taking on a broader range of responsibilities than employees in large organizations typically do.</p><p>Everyone knows one or more young talents who seem to become senior overnight and absorb new technologies like fresh air, while others need intensive training on every new piece of technology.</p><p>Of course, a few are natural, usually identified by how they talk about their personal IT projects during interviews. Or the speed and enthusiasm with which they approach a challenge. </p><p>But to grow not only those, but also talent who aren&#8217;t geniuses, you need an environment to learn. When we asked people what they enjoyed most, they said it was good old &#8220;boxes and arrows&#8221;: discussing architecture and design problems on a whiteboard with a senior team member. Just to see the train of thought senior developers take. Finding new ideas and aspects that come from years of experience. Showing persistence in complex troubleshooting situations. Learning new tools and how to track down problems at the intersection of infrastructure and code. </p><p>And sometimes it&#8217;s just as simple as trying to be a good role model for colleagues. In the end, we are all human beings and appreciate mutual respect. As my colleague always said: &#8220;Employees work for other people, not for companies.&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[After the Honeymoon - Lessons from naïve Agentic Coding for Larger Projects]]></title><description><![CDATA[What building a complex web portal with Claude Code taught me about context, architecture, reviews, and engineering responsibility.]]></description><link>https://www.etx2.net/p/after-the-honeymoon-lessons-from</link><guid isPermaLink="false">https://www.etx2.net/p/after-the-honeymoon-lessons-from</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 28 Oct 2026 11:46:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U4wg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f34ef49-6ea1-46fd-accd-5e56fe71bb14_720x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The first results were absolutely stunning. With Claude Code, I got a container-based web portal running in Azure with several environments, and I did almost nothing myself. Just a specification and a few prompts, and a little bit later it was live.</p><p>But that wasn&#8217;t the point of the exercise; the web is full of stories like this. I wanted to know how agentic coding works for large, complex enterprise applications. So I decided to take one of my personal pet projects and turn it into a full-blown SaaS application.</p><p>In this article, I want to share my Claude Code journey, from a na&#239;ve approach to a one-person-built enterprise application, and its impact on development results, architecture, and token consumption.</p><p><strong>What I was Building</strong></p><p>My personal pet project is rather simple. It&#8217;s a tool to use AI for deep technology research and comparison. I decided to turn it into a pretend SaaS offering. I added features that typically come in larger enterprise applications, so that my project became a web application with enough complexity to go beyond a convincing demo.</p><p>So, I added:</p><ul><li><p>Sign-in, sign-up, subscription management, and an admin portal.</p></li><li><p>Billing and invoicing.</p></li><li><p>Business logic and data structures for the generation of technology assets.</p></li><li><p>Asynchronous background tasks and batch processing.</p></li><li><p>A container-based application hosted in Azure.</p></li><li><p>Multiple environments, continuous integration and deployment through GitHub Actions.</p></li></ul><p>I wanted to explore what worked, where Claude&#8217;s subscription and context window limits became relevant, and what happened as both the codebase and the conversations grew.</p><p><strong>My approach: give Claude room, then ask Claude to review</strong></p><p>I used a na&#239;ve conversational approach with Claude Code. With the most expensive and capable model Fable 5.1 for convincing results, of course. I wanted to use it for both planning and coding. Just to see what comes out. Hey, money is not everything; results matter!</p><p>First, I asked Claude to write the specification. This worked smoothly &#8211; Fable broke the specification down into phases and slices for the implementation. The specification also defined business terms and entities so Claude would know how things relate to each other.</p><p>I gave Claude considerable freedom to choose the architecture and implementation.</p><p>Fresh Claude sessions reviewed the work done by other sessions. That separation was deliberate. A fresh session could examine the result without carrying the whole implementation conversation. However, it still depended on the code and documentation available to explain the system.</p><p>With my limited bandwidth, I concentrated on AI reviews rather than detailed human code reviews. This made the experiment useful for exploring a management question: how much confidence should we place in a development process where AI performs both activities?</p><p><strong>The honeymoon was real</strong></p><p>The results of the first slices and phases were really convincing. In no time, there was a feature-rich portal with automatic testing that would have taken weeks to build before AI. For UI design, Fable asked me to provide 3 websites that I liked and one that I didn&#8217;t like and made an awesome proposal.</p><p>The cloud provisioning worked smoothly. Fable set up the CI/CD pipelines with Bicep in GitHub Actions. It also anticipated advanced requirements and features upfront, like proper monitoring, auditing, and usage reporting, and built the infrastructure to support them.</p><p>When runtime errors occurred in the cloud, Claude was particularly impressive at investigating them. It was strong at finding root causes in cloud setup issues. It gave me clear instructions when I had to create external dependencies manually, like some DNS entries.</p><p>That success made it easy to keep extending the portal. Each additional feature looked like a manageable next step.</p><p>The difficulties emerged through accumulation.</p><p><strong>What changed as the project grew</strong></p><p>I noticed a few things as the codebase grew larger and larger.</p><p>First, Claude has a tendency to become very verbose. It produced a lot of text in chat responses and specifications. The more features I built into the portal, the more this became a challenge. At some point, it just was really overwhelming to follow the chat responses and understand the changes that Fable was proposing to build. With mental overload, there is also a risk that you accept what Fable proposes too quickly; everything sounded very convincing, after all.</p><p>Second, I noticed that Fable did not produce the most efficient code. And especially not the most maintainable code. Don&#8217;t get me wrong, the quality was still good. I would have created more separate modules and used different naming. The code worked.</p><p>But for mission-critical applications, code quality, proper architecture, and testability are essential in the long run. People say AI made code cheap. But for essential systems, the core parts need to be built with high quality in mind to meet future requirements. Cheap code comes back to bite you.</p><p>Parts of this might have been caused by inconsistencies in the specification. While the spec seemed crystal clear to me initially, every inconsistency I missed came back to haunt me later. Which is perfectly natural and, one might say, exactly like the past. But Fable&#8217;s convincing proposals make it easy to miss things. Suddenly, a feature refactoring leaves remnants across the application. You end up with input elements that are not needed and data that is not used.</p><p>Which brings me to the next issue: Because of verbose text and code, and an unclear architecture and module cut, the context window was quickly exhausted for features that affected larger parts of the system. Claude sliced the features in a way that each slice should run in a fresh session, retrieving the current state and tasks from the specification. With all the verbosity built into the application, the context window filled to more than 70 percent in no time, and Claude started recommending a fresh session. Therefore, the weekly Fable limits in the subscription kicked in quite early in the week (which might not be a bad thing to make you pause and think about what you are doing&#8230;). Conversations with Claude when you hit the session window limit remind me a lot of the Groundhog Day movie, where Claude says it will soon forget what we talked about today.</p><p><strong>What I would take into a larger project</strong></p><p>For engineering leaders, I see a few practical lessons.</p><blockquote><p>1) <strong>You cannot &#8220;agentify&#8221; your system out of bad requirements</strong>. Continuously work on the quality of the specification. Invest time to get definitions, business terms, and entities right. This will make conversations with the AI much clearer and much more efficient. Consider domain-driven design approaches with the ubiquitous language approach to make sure everyone involved understands what is to be built.</p><p>2) <strong>Get the application architecture and the modules right</strong>. Agentic AI will be much more efficient when modules have clear purpose and interfaces. AI will be able to take care of the implementation inside them, with much more clarity and less verbosity.</p><p>3) <strong>Move forward in small steps</strong>. Tasks too big have a tendency to clutter your codebase or your specification. Do not rely only on AI-driven reviews and testing without control. These can help, but for the critical parts of a system, a human must be in the loop. Consider test-driven development. AI made code cheap, but human reviews are more expensive. Therefore, you&#8217;d better make sure pull requests are easy to digest.</p></blockquote><p>My experiment taught me how quickly Claude Code could help build a substantial application. It also exposed how hard it is to maintain consistency and coherence while delegating both development and review.</p><p>So, what&#8217;s the gist of it? Use agentic development for critical systems, or rather, just rely on AI generating code snippets? Definitely agentic development. But to create high-quality software that lasts, a lot of human dedication on the outcome is still important.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[When AI writes both the code and the checks - can you trust either?]]></title><description><![CDATA[A recent case study analyzes what went wrong when developing a software system without code inspection]]></description><link>https://www.etx2.net/p/when-ai-writes-both-the-code-and</link><guid isPermaLink="false">https://www.etx2.net/p/when-ai-writes-both-the-code-and</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Mon, 12 Oct 2026 06:50:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cZXT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Software development with AI agents is easy and impressively fast. It&#8217;s insane to watch how quickly even non-professionals can produce complex systems in no time. There is a new case study however that reveals how things can go terribly wrong, even though the operator took extensive precautions to avoid bugs.</p><div><hr></div><p>Summary:</p><ul><li><p>When humans delegate code generation and reviews to agents like Claude Code, Gemini or ChatGPT and only inspect work results in running software or review reports, errors can easily be overlooked - despite good test and review coverage.</p></li><li><p>Reassuring AI messages can give a false sense of reliability  </p></li></ul><div><hr></div><p>The case described in <a href="https://arxiv.org/pdf/2610.08651">A Case Study in Assuring AI-Written Software</a> demonstrates how a healthcare practice developed their own system for note-taking support, scheduling and payroll workflows, alongside background functions such as access control, backups and audits. The operator set up an elaborate AI workflow, but had no particular software engineering background. </p><p>The workflow used by the developer is shown in the following figure. It evolved over time as the experience of the operator grew.   </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cZXT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cZXT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 424w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 848w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 1272w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cZXT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png" width="1004" height="621" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:621,&quot;width&quot;:1004,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80217,&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.etx2.net/i/219593668?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.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_!cZXT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 424w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 848w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 1272w, https://substackcdn.com/image/fetch/$s_!cZXT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce59dd4e-7307-4454-97d8-42a8e183dd62_1004x621.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Development workflow - image from the case study. </figcaption></figure></div><p>Supervisory agents in separate context windows were used to review code and propose fixes that the operator decided to forward to the worker agent or not. Also, an &#8220;agent council&#8221; comprised of different models was used to review and provide recommendations and risks identified. The human controller would review any suggestions and work lessons learned and findings into the testing and review workflows.</p><p>The developer was very careful with automatic testing and deliberately implemented targeted failures to ensure that the test coverage would detect them. </p><p>Over time, external references to security standards like OWASP or HIPAA recommendations and other standards were introduced to the context to improve the quality and security of the software. </p><p>But then an interesting phenomenon happened: Some of the evaluations that the AI introduced formed its own kind of erroneous layer. For example, the backup was not working despite testing showing everything is green.  &#8220;An audit stopped running without producing a failure, while another report calculated its pass rate only from checks that emitted results, allowing missing checks to disappear from the total.&#8221; </p><p>It turned out that some of the checks implemented by the AI evaluated proxies instead of real evidence that a particular function produced a meaningful result. Without experience in SW development and careful code reviews, these issues are hard to detect. </p><p>So it looks like code reviews, real end-to-end functionality checks and understanding of what is generated is still required, despite AI reviews with different models. </p><p>Of course - the story only shows a single case, but still reveals that caveats exist. And just to be sure: This is not a story from years back. The review was done in June and August 2026. Models involved were from Anthropic, Google and OpenAI. </p><div><hr></div><p>Link to the case study: <a href="https://arxiv.org/pdf/2610.08651">A Case Study in Assuring AI-Written Software</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[A Hundred Ways to Build an Agent: Giving RAG a Knowledge Graph.]]></title><description><![CDATA[Part 2: Why the next leap in reliable AI will come from combining vector search with knowledge graphs]]></description><link>https://www.etx2.net/p/a-hundred-ways-to-build-an-agent</link><guid isPermaLink="false">https://www.etx2.net/p/a-hundred-ways-to-build-an-agent</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Thu, 08 Oct 2026 20:50:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U4wg!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f34ef49-6ea1-46fd-accd-5e56fe71bb14_720x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI agents are now really good at sounding smart. If you ask a support agent why your laptop keeps freezing, it will just tell you the problem, recommend Patch 2026.9, and write the answer in a way that sounds very confident.</p><p>But if you ask a more difficult question, like why you should trust this recommendation, then often the illusion breaks.</p><p>The problem is not how well they speak. The problem is structure. Large language models are very good at making language, but they do not keep a stable and visible model of how customers, products, issues, causes, and solutions are connected. The answers sound good, but you cannot check where they come from.</p><p>This is where knowledge graphs come in.</p><p>A knowledge graph is a network of entities and the relationships between them. In a customer-support setting, the entities may be a customer, a laptop model, a system-freeze issue, a software release, and Patch 2026.9. The relationships might show that the customer reported the issue, the issue affects the laptop, the software release caused it, and Patch 2026.9 resolved it.</p><p>Now, an answer is not just a single claim anymore. It is the end of a path you can see.</p><h2><strong>Retrieval is not reasoning</strong></h2><p>Most retrieval-augmented generation systems begin with one of two approaches.</p><p>Keyword search gives you exact matches. It can find every ticket with &#8216;system freezes&#8217;, but it will miss &#8216;the application hangs&#8217; or &#8216;the device becomes unresponsive&#8217;.</p><p>Vector search solves this problem with different words. It matches similar meanings, so it knows that these phrases talk about the same thing. This is much better, but just being similar is not enough. A vector database can say that two texts are close in meaning, but it does not tell the agent how one thing caused another, which product had the problem, or if the fix really worked.</p><p>Knowledge graphs add what is missing. They show the relationships clearly. The agent can trace a path from product to issue, from issue to cause, and from issue to solution. The answer isn&#8217;t just a document; it&#8217;s a path of evidence.</p><p>This difference is important. In simple cases, a good-sounding answer is enough. But in healthcare, finance, compliance, engineering, or enterprise support, it is not enough. Someone must see what evidence was used and how the answer was made.</p><h2><strong>The most useful architecture is hybrid</strong></h2><p>This does not mean that graphs should replace vector search. In reality, the best systems use both together.</p><p>Vectors are good for finding things. They can search through messy language and find good candidates, even if people describe the same problem in different ways. Graphs are good for proof. They can check if the right things are really connected and show the path that supports the answer.</p><p>There are two common ways to combine them.</p><p>The first way is routing. If the question is not clear and just asks for related information, the agent uses vector search. If the question asks for cause and effect, a longer explanation, or a recommendation you can defend, the agent uses the graph.</p><p>The second way is fusion. Vector search finds many possible matches first. Then the graph checks the connections and finds the best evidence. This is very useful when the graph is not finished yet. The vector part gives coverage, and the graph gives traceability.</p><p>The choice is not about theory. It is about how things work. Use routing when one method is enough and speed is important. Use fusion when missing a case or giving the wrong advice is expensive.</p><h2><strong>Building the graph is the easy part</strong></h2><p>A simple prototype can turn raw text into a graph very fast. An LLM takes out the entities and relationships from a support ticket, writes them as subject-predicate-object triples, and puts them into nodes and edges.</p><p>But the harder problem is to keep the graph trustworthy when it gets bigger.</p><p>Real data is not consistent. &#8216;Patch 2026.9&#8217;, &#8216;the 2026.09 patch&#8217;, and &#8216;the September 2026 patch&#8217; can all mean the same thing. &#8216;System freezes&#8217;, &#8216;application hangs&#8217;, and &#8216;device becomes unresponsive&#8217; can all be one issue. If every variation becomes its own node, the evidence is split in the graph and the agent only sees part of the pattern.</p><p>This is why entity resolution is so important. New facts should make existing entities stronger, not create new duplicates that look the same. Stable IDs, synonym lists, fuzzy matching, and embedding comparisons can help clean up the data before adding it.</p><p>Schemas and ontologies are important for the same reason. A schema says what nodes and relationships are needed. An ontology says which relationships make sense in the domain. Together, they stop the graph from becoming a big pile of nonsense that just looks connected.</p><h2><strong>The graph should produce evidence, not prose</strong></h2><p>There is also an important rule when you use graphs with agents. You must separate getting the truth from making the language.</p><p>The agent should not start by writing an answer. It should first call a graph tool with the question, the right entities, and filters. The tool gives back a small evidence subgraph and a reasoning path. Only then does the language model turn this into a good explanation.</p><p>In this setup, the LLM is not the source of truth anymore. It is just the interface to the truth.</p><p>This separation also makes things safer. If you let a model make any Cypher or SPARQL query, it is flexible, but it gets fragile when schemas get bigger and questions are not clear. In production, it is better to use narrow tools like find_related_issues or get_resolution_path. Then query building, checking, permissions, and formatting are outside the model.</p><h2><strong>From demo to infrastructure</strong></h2><p>The last lesson is that being ready for production is not just about database size. It is about governance.</p><p>A reliable graph needs schema versioning, duplicate checks, consistency checks, access controls, audit logs, and health metrics. Teams should watch for orphaned nodes, slow queries, old indexes, strange node growth, and schema drift. Sensitive data should be masked or left out before it gets to the agent.</p><p>Without these controls, a graph can look like a good source but have bad structure. With them, it becomes real reasoning infrastructure.</p><p>The promise of Graph RAG is more than just better search. It gives AI agents something they do not have now: a stable map of how facts fit together and a way to show how they got the answer.</p><p>The next generation of trustworthy agents will not just give you an answer. They will show you the path they took to get there.</p>]]></content:encoded></item><item><title><![CDATA[When AI Coding Outruns Software Delivery]]></title><description><![CDATA[Why review capacity, independent verification, and total delivery cost belong in the business case for coding agents.]]></description><link>https://www.etx2.net/p/when-ai-coding-outruns-software-delivery</link><guid isPermaLink="false">https://www.etx2.net/p/when-ai-coding-outruns-software-delivery</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Sat, 26 Sep 2026 11:04:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/16d8d4cd-694b-4286-841d-482dafc782c7_876x401.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An AI agent finishes a task and opens a pull request. The implementation took minutes. Someone still has to establish whether it solves the right problem, fits the architecture, and can be deployed safely.</p><p>Multiply that across an engineering team. The potential productivity gain is substantial. So is the queue of work waiting for somebody to trust it.</p><p>Happy Bhati explores this problem in <em><a href="https://arxiv.org/abs/2609.04681v1">Beyond Code Generation: Reliability, Verification, and Cost Economics in the Agentic Software Development Lifecycle</a></em>. His September 2026 research synthesis argues that useful output and total cost depend on the engineering system surrounding the agent.</p><p><strong>Coding activity grows faster than releases.</strong></p><p>The September revision of <em><a href="https://www.nber.org/papers/w35275">Writing Code vs. Shipping Code</a></em> analyzes more than 500,000 GitHub developers. At the autonomous-agent stage, estimated cumulative increases reach <strong>240% for commits, 80% for projects, and 30% for releases</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xO9p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xO9p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 424w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 848w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 1272w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xO9p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png" width="1456" height="1455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1455,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6421154,&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.etx2.net/i/217383971?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.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_!xO9p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 424w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 848w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 1272w, https://substackcdn.com/image/fetch/$s_!xO9p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7602435-312c-4cf2-978b-8d113d4e4d98_2639x2638.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! 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>A 30% release gain is meaningful. But implementation accelerates much faster than the activities required to deliver it. These observational estimates do not isolate review as the cause; they support the broader bottleneck argument.</p><p>Bhati calls this the <em>Agentic SDLC Throughput Paradox</em>. If changes arrive faster than a team can validate and integrate them, work accumulates. More generation capacity can enlarge that queue.</p><p>Anthropic provides a concrete example. In its <a href="https://claude.com/blog/agentic-coding-is-straining-ci-heres-how-we-scaled-test-impact-analysis-at-anthropic">account of scaling test impact analysis</a>, it reports <strong>25 times as many continuous integration (CI) jobs over six months</strong>. Its test-selection service repeatedly struggled with the load. The eventual redesign separated stored test history from processing workers, allowing more workers to run in parallel. Anthropic says the service became stable, although operating costs increased. Faster coding had created a need to invest in the infrastructure that checks it.</p><p><strong>Human oversight remains part of the work.</strong></p><p>The <a href="https://arxiv.org/abs/2604.20779">SWE-chat study</a> examined 6,000 coding-agent sessions from public repositories. Only 44% of the code agents produced was kept in users&#8217; commits. In 44% of conversation turns, users corrected the agent, reported a problem, or interrupted its work.</p><p>Discarded code is not always wrong; experimentation and revision are normal. But these figures show work that code counts miss. Teams need to understand how much checking agents create, and where human judgment adds most value. That need not mean manually reviewing every change.</p><p><strong>Checking and fixing code costs money.</strong></p><p>Bhati&#8217;s proposed <em>Verification Tax</em> compares the cost of automated builds and tests, code reviews, security checks, and corrections with the cost of generating code. Token spending shows only part of that bill.</p><p>Imagine a &#8364;5 agent run that leaves a senior engineer with two hours of troubleshooting. A &#8364;20 run produces code that is easy to check. Looking only at the agent&#8217;s bill would make the first option seem cheaper.</p><p>The ratio needs care: cheaper generation raises it even if checking costs stay unchanged. Skipping checks lowers it but may leave more bugs. Track total delivery cost and reliability alongside it. Anthropic&#8217;s CI example adds another consideration: spending more on verification infrastructure can be worthwhile if it removes delays.</p><p><strong>Automated checks can miss the same mistakes.</strong></p><p>Agents can help write tests and review code. But if a test repeats the same wrong assumption as the code, both can look correct while missing the problem.</p><p>A <a href="https://arxiv.org/abs/2602.07900">SWE-bench Verified study</a> found that asking agents to write more or fewer tests did not significantly change task success in that experiment. Many tests displayed values rather than checking correctness. Useful checks should reflect business rules, previous bugs, expected behaviour between systems, and security requirements.</p><p>Anthropic&#8217;s <a href="https://claude.com/blog/how-anthropic-secures-its-ai-native-software-development-lifecycle">security-process account</a> describes specialist review agents working alongside conventional security checks. Controls vary by risk: critical areas retain strict human approval, automated approvals are sampled, and new reviewers initially operate under human supervision. Separate agents can still share blind spots; assigning different roles does not establish independence.</p><p>One incident makes the need for controls tangible. An incident-response agent could not deploy fixes, but asked another agent through Slack to push a fix. A human review gate caught the request. The practical lesson is that permissions must cover what an agent can get another agent to do, as well as its own actions.</p><p>These are Anthropic&#8217;s accounts of its own operations, rather than independent evaluations. They illustrate useful controls without proving those controls will work equally well elsewhere.</p><p><strong>Count changes after they qualify for production.</strong></p><p>Bhati proposes <em>Production-Qualified Change</em> (PQC): credit a change only after it passes the relevant tests, security checks, reviews, and deployment or production-validation gates. Requirements should reflect risk; a documentation correction and an authorization change need different treatment.</p><p>PQC still needs validation and does not make changes equal in complexity or value. Compare similar classes of work alongside delivery time and failures. Using it as an individual developer score would invite gaming.</p><p>The broader proposal is an <em>Agentic SDLC Control Plane</em>: shared rules and monitoring connecting task risk, permissions, budgets, checks, and outcomes across existing development tools.</p><p>My starting point for an enterprise pilot would be:</p><ul><li><p><strong>Bound the work.</strong> Choose eligible repositories and task types, with clear ownership and acceptance criteria.</p></li><li><p><strong>Limit execution.</strong> Set time, spend, permissions, retries, and escalation conditions.</p></li><li><p><strong>Validate the checks.</strong> Test automated reviewers under human supervision and define controls agents cannot bypass, including through other agents.</p></li><li><p><strong>Plan testing capacity.</strong> Monitor CI queues and test-selection delays as code volume grows.</p></li><li><p><strong>Measure complete delivery.</strong> Capture generation cost, review effort, rework, delivery time, and post-release failures.</p></li><li><p><strong>Expand using evidence.</strong> Increase autonomy when comparable work shows dependable outcomes within acceptable cost and risk.</p></li></ul><p>The paper treats autonomy as constrained by money, reliability, and human attention. Review capacity and testing infrastructure belong in the business case from the beginning. Before expanding a rollout, ask whether more useful changes reach users at an acceptable total cost, without increased failures or unsustainable demands on experts.</p><p><em>Where is AI moving the bottleneck in your engineering team: implementation, review, testing, or deployment?</em></p><div><hr></div><p><em>Source note: Based on Bhati&#8217;s September 2026 preprint (v1), linked research, and Anthropic&#8217;s security (July 21) and CI (September 14) articles. Research checked September 25; Anthropic articles checked September 26, 2026.</em></p>]]></content:encoded></item><item><title><![CDATA[A hundred ways to build an AI agent]]></title><description><![CDATA[Part 1 of [I don&#8217;t know] &#8212; Choosing a platform is only the beginning of owning the outcome]]></description><link>https://www.etx2.net/p/a-hundred-ways-to-build-an-ai-agent</link><guid isPermaLink="false">https://www.etx2.net/p/a-hundred-ways-to-build-an-ai-agent</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 16 Sep 2026 16:56:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/471f1ca1-aa30-4628-ae37-a83e647c9512_989x474.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An AI agent that handles one customer email makes a convincing demo. Tomorrow&#8217;s inbox raises harder questions. What happens when two customers share a name, the contract document is outdated, or a system times out after saving a change?</p><p>A provider can restore its service while your customer&#8217;s request remains unresolved. Someone in your organisation still owns that outcome.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">Enterprise Technology &amp; Excel Exorcism is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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>That is the starting point for this ETX2 series, written for people choosing, building, and taking responsibility for AI in business processes. There may be a hundred ways to build an agent. I want to understand which ones earn their place.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QciF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QciF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 424w, https://substackcdn.com/image/fetch/$s_!QciF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 848w, https://substackcdn.com/image/fetch/$s_!QciF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 1272w, https://substackcdn.com/image/fetch/$s_!QciF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QciF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png" width="1456" height="1455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1455,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4900919,&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.etx2.net/i/215855007?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.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_!QciF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 424w, https://substackcdn.com/image/fetch/$s_!QciF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 848w, https://substackcdn.com/image/fetch/$s_!QciF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 1272w, https://substackcdn.com/image/fetch/$s_!QciF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b32584c-0dbf-44a7-b416-b15b6d85e87d_2639x2638.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Start with the process</h2><p>Imagine a customer asking why their insurance premium increased.</p><p>Identify the policy, retrieve the renewal notice, draft an explanation, and obtain approval: we can prescribe those steps. My default is a workflow, using a model where language understanding or drafting helps.</p><p>Now suppose the notice contradicts the policy record. Choosing which correspondence to inspect and whether to investigate further gives an agent meaningful discretion.</p><p>Vendor definitions differ in emphasis. <a href="https://www.anthropic.com/engineering/building-effective-agents">Anthropic</a> distinguishes predefined paths from model-directed action; <a href="https://developers.openai.com/api/docs/guides/agents">OpenAI</a> emphasises planning, tools, and context; <a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/fundamentals-what-is-copilot-studio">Microsoft</a> combines agents with workflows. For this series, <strong>an agent uses a model to choose actions towards a goal, examines the results, and decides what to do next, within boundaries we set.</strong> Anthropic&#8217;s recommendation to try simpler solutions first is a useful starting discipline.</p><p>An email trigger only determines when work starts. It says nothing about who chooses the subsequent steps. Our design begins with a prescribed workflow and delegates the uncertain investigation.</p><h2>Separate the platform decision from the design decision</h2><p>Two questions help organise the landscape, but they do different jobs.</p><p><strong>Who operates the runtime?</strong> This helps narrow the platform shortlist and the operational responsibilities your team takes on.</p><p><strong>Who selects the steps?</strong> This is primarily a design decision inside the chosen platform. Many products support both prescribed sequences and model-selected actions. You can change that balance without necessarily changing vendors.</p><p>The workflow with a delegated investigation is therefore a design we impose. Buying an agent platform does not make that decision for us.</p><p>For runtime ownership, the main options look like this. &#8220;Your team&#8221; includes operating software on rented cloud infrastructure; the following list describes the listed deployment route.</p><p><a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/fundamentals-what-is-copilot-studio">Copilot Studio</a> &#8594; Runtime operated by Microsoft &#8594; build with Visual agents and flows</p><p><a href="https://developers.openai.com/api/docs/guides/migrate-to-responses">OpenAI Responses API</a>&#8594; Your team &#8594; Custom model integration</p><p><a href="https://developers.openai.com/api/docs/guides/agents/sdk">OpenAI Agents SDK</a> &#8594; Your team &#8594; Agent building blocks</p><p><a href="https://developers.openai.com/api/docs/guides/agents-api/overview">OpenAI Agents API</a> &#8594; OpenAI &#8594; Managed agent execution</p><p><a href="https://platform.claude.com/docs/en/build-with-claude/working-with-messages">Claude Messages API</a> &#8594; Your team &#8594; Custom model integration</p><p><a href="https://code.claude.com/docs/en/agent-sdk/overview">Claude Agent SDK</a> &#8594; Your team &#8594; Agent building blocks</p><p><a href="https://platform.claude.com/docs/en/managed-agents/overview">Claude Managed Agents</a> &#8594; Anthropic &#8594; Managed agent execution</p><p><a href="https://n8n.io/ai/">n8n</a> / <a href="https://docs.dify.ai/en/home">Dify</a> &#8594; Either &#8594; Workflows and agents</p><p><a href="https://docs.langchain.com/oss/python/langgraph/overview">LangGraph, self-hosted</a> &#8594; Your team &#8594; Programmed execution graphs</p><p>For direct APIs, &#8220;runtime&#8221; means the application running the process; the provider still serves the model. The managed-agent entries describe provider-run orchestration; tools can still execute in your own environment. For n8n and Dify, &#8220;either&#8221; means choosing a hosted or self-hosted edition.</p><p>The cloud platforms also offer managed runtime options: <strong>Microsoft Foundry Agent Service</strong>, <strong>Amazon Bedrock AgentCore</strong>, and <strong>Google Gemini Enterprise Agent Platform</strong>. They belong on a shortlist shaped by identity, networking, and monitoring requirements. Google also offers the Agent Development Kit and visual Agent Studio. <a href="https://learn.microsoft.com/en-us/azure/foundry/agents/overview">Microsoft</a>, <a href="https://aws.amazon.com/bedrock/agentcore/">AWS</a>, <a href="https://cloud.google.com/products/gemini-enterprise-agent-platform">Google</a>.</p><p>There is also a model-hosting choice. Self-hosting an application while calling an external model API still sends that provider the supplied context. Running an open-weight model locally through software such as <a href="https://docs.ollama.com/quickstart">Ollama</a> adds responsibility for model serving, capacity, and updates.</p><h2>Judge the build by its difficult cases</h2><p>The authoring experience matters to build effort. No-code uses instructions, templates, and tools; low-code adds visual flows, expressions, and scripts; code gives us APIs, SDKs, and application logic. None removes the need to debug what happens.</p><p>Our first practical instalment will apply this to Copilot Studio: provider-operated execution, with prescribed steps around a model-directed investigation.</p><p>I use six questions to keep that evaluation grounded: build effort, access, decision scope, testability, cost, and failure ownership. Together, they cover what it takes to build the system and keep the business process working.</p><p>For our premium example, I care less about the first plausible draft than the ambiguous customer identity. A shared name must not be enough to select a policy. The evidence needs to show both that the correct records were retrieved and that access stayed within scope.</p><p>Missing or outdated evidence should lead to escalation. A polished explanation is a failure if the system has filled the gap with an invention. I favour bounded investigation and drafting, with an explicit approval before sending.</p><p>The timeout is another revealing test. If the write succeeded but its acknowledgement was lost, a retry can repeat the action. Durable execution helps preserve progress; preventing duplicate effects also requires support at the action boundary, such as a request identifier that the receiving service recognises across retries. Where that support is absent, the design needs reconciliation before retrying an uncertain action. </p><p>Alongside those cases, the comparison needs three practical records:</p><ul><li><p>Integration effort, including custom work for the mailbox and policy system.</p></li><li><p>Completion quality, elapsed time, model and platform charges, and human review effort.</p></li><li><p>Named owners for incorrect advice, failed integrations, and unresolved requests.</p></li></ul><p>The independent paper <em><a href="https://arxiv.org/abs/2407.01502">AI Agents That Matter</a></em> shows why quality and cost belong together: accuracy-focused benchmarks can reward unnecessary complexity and expense. For me, a more elaborate agent has to demonstrate a worthwhile improvement over the simpler workflow.</p><p>Ownership needs more than a name in a document. The process owner decides when to suspend automated handling, technical support diagnoses integration failures, and an assigned business team takes unresolved requests. Service hours and escalation routes determine whether that handover works when nobody is watching the demo.</p><h2>Plan for the platform to change</h2><p>Migration is not hypothetical. OpenAI&#8217;s <strong>Agent Builder</strong> is deprecated and scheduled to close on November 30, 2026. That removes it from my shortlist for a new build and raises a broader question: how much work survives a platform change? <a href="https://developers.openai.com/api/docs/deprecations#2026-06-03-agent-builder">Deprecation notice</a>.</p><p><a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a> standardises tool and data connections; <a href="https://a2a-protocol.org/latest/">A2A</a> supports communication between agent applications. Neither makes the whole application portable.</p><p>I put particular value on keeping test cases and expected outcomes outside a platform&#8217;s proprietary tracing format. &#8220;Do not send when identity is ambiguous&#8221; should remain testable after migration, even if execution is recorded differently. Reusing the policy-lookup tool helps; preserving evidence that the process works matters just as much.</p><p>We will carry that scenario through the series, starting with the Copilot Studio build. Tomorrow&#8217;s inbox remains the test.</p><p>Which step in your process can an agent choose, and who takes over when it fails?</p><p><em>Product references checked on September 15, 2026. </em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">Enterprise Technology &amp; Excel Exorcism is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</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[Introducing ETX2 Technology Dossiers: Starting with Meibel AI]]></title><description><![CDATA[Behind the conference headlines: A new series of independent, enterprise-focused investigations&#8212;starting with Meibel AI and its approach to complex documents, confidence, and retrieval]]></description><link>https://www.etx2.net/p/introducing-etx2-technology-dossiers</link><guid isPermaLink="false">https://www.etx2.net/p/introducing-etx2-technology-dossiers</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 09 Sep 2026 13:34:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/df05d012-e5ff-4b56-a2e8-71ab29d67a98_841x490.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><em>Update on Oct, 28th 2026: Added SOC 2 Type 2 and HIPPA compliance, which was missing in the original article. Check out more on <a href="https://www.meibel.ai/">https://www.meibel.ai/</a></em></p><div><hr></div><p>Whenever I attend an AI conference, I am struck by how many vendors I have never heard of.</p><p>Beyond the familiar names and headline sponsors, there are dozens&#8212;sometimes hundreds&#8212;of companies promising to solve a particular piece of the enterprise AI puzzle. Some offer little more than familiar technology in new packaging. Others may be genuinely interesting. From a conference booth or a polished demo, it is almost impossible to tell which is which.</p><p>That makes me curious. What do these companies actually offer? Where would their technology fit within an enterprise architecture? What distinguishes it from the alternatives? Is there real substance behind the positioning&#8212;and, occasionally, a hidden gem worth watching?</p><p>I want to go beyond the marketing page and the five-minute demo. Not necessarily because I intend to use or recommend a product, but because I want to understand <strong>what it actually does, where it fits, what makes it different, where its limitations lie, and whether it belongs on an enterprise technology radar.</strong></p><p>That is the idea behind a new ETX2 asset series: <strong>Technology Dossiers</strong>.</p><h2><strong>What is an ETX2 Technology Dossier?</strong></h2><p>ETX2 Technology Dossiers are compact but detailed assessments for people who need to look beyond product positioning.</p><p>There is no fixed publishing roadmap and no attempt to cover the market systematically. I will investigate technologies that cross my path through projects, research, conferences, or conversations&#8212;or simply because something looks interesting enough to examine more closely.</p><p>The dossiers may cover startups, established vendors, individual products, platforms, or particular technology approaches.</p><p>Importantly, <strong>there is no financial relationship behind the selection.</strong> I am not paid by the vendors, there is no affiliate model, and inclusion in a dossier does not constitute a recommendation.</p><p>The purpose is to investigate, assess, and document what I find.</p><p>Each dossier will typically examine:</p><ul><li><p>what the product is&#8212;and what it is not,</p></li><li><p>company and product maturity,</p></li><li><p>architecture and technical capabilities,</p></li><li><p>distinctive features,</p></li><li><p>deployment and integration options,</p></li><li><p>suitability for enterprise and regulated environments,</p></li><li><p>customer references and available evidence,</p></li><li><p>limitations and open questions,</p></li><li><p>and practical considerations for evaluating the technology.</p></li></ul><p>Where possible, I will also include hands-on observations.</p><p>These are not laboratory benchmarks or formal procurement assessments. Think of them as <strong>independent technology reconnaissance for enterprise practitioners.</strong></p><h2><strong>Dossier #1: Meibel AI</strong></h2><p>The first dossier examines <strong>Meibel</strong>, a relatively young AI company I encountered while researching document-centric enterprise AI. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nNeb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nNeb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!nNeb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png" width="1456" height="1460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6667622,&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://etx2.substack.com/i/214877205?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.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_!nNeb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!nNeb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e2a514f-72a1-4e67-a8d9-0ea86f9c2483_2639x2646.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Meibel positions its platform between complex enterprise documents and the AI applications or agents that need to work with them.</p><p>At a high level, its architecture follows a four-stage pipeline:</p><p><strong>Parse &#8594; Transform &#8594; Ingest &#8594; Agents</strong></p><p>Documents are decomposed and interpreted, transformed into structured schemas, indexed for different retrieval mechanisms, and made available to AI agents. Confidence scoring, provenance, and execution policies operate across those stages.</p><p>That makes Meibel more than a conventional OCR or document-extraction service.</p><p>Three aspects caught my attention in particular.</p><h3><strong>1. Runtime confidence&#8212;not just AI output</strong></h3><p>Meibel places unusual emphasis on measuring confidence throughout the processing pipeline.</p><p>Confidence is not merely displayed as metadata. It can help determine whether an AI-generated result proceeds automatically, is processed again, is sent to a human reviewer, or is rejected.</p><p>For enterprise AI, I find this particularly interesting.</p><p>The relevant question is increasingly not <em>&#8220;Can the model produce an answer?&#8221;</em> but:</p><p><strong>&#8220;Under what conditions am I prepared to let software act on that answer?&#8221;</strong></p><p>Those are very different questions.</p><h3><strong>2. Complex documents&#8212;not just clean text</strong></h3><p>The second interesting area is Meibel&#8217;s approach to document intelligence.</p><p>Instead of immediately flattening a document into chunks of text, the platform attempts to preserve structures such as tables, sections, figures, captions, footnotes, and cross-references. It can then expose structured information through schemas alongside semantic retrieval.</p><p>That matters because many of the most valuable enterprise documents are precisely those that conventional RAG pipelines struggle with: specifications, contracts, insurance documents, construction documents, RFPs, and other material in which layout and relationships carry meaning.</p><p>In my own limited testing, schema-based extraction through the API performed considerably better than simply uploading a difficult document through the user interface. I also found the document Q&amp;A capability convincing, although repeated processing produced some non-deterministic behaviour that would merit closer investigation before production use.</p><h3><strong>3. Graphs enter the retrieval layer</strong></h3><p>The third area is one I find especially interesting: Meibel combines semantic retrieval and SQL-style access with graph-based traversal of relationships between document elements and references.</p><p>An enterprise question may require more than retrieving two individually relevant chunks. A system may also need to understand that one section constrains another, that a footnote qualifies a table entry, or that one document refers to a requirement defined elsewhere.</p><p>This moves the discussion beyond the simplistic idea that better RAG is mainly a matter of embedding models and chunk sizes.</p><h3><strong>How I tested Meibel</strong></h3><p>Meibel is an API-first product, so I wanted to evaluate it through code rather than rely solely on the user interface. I created a set of test scripts that submitted different document types, defined information to be extracted, and examined the resulting structured output. For the most demanding test, I used a deliberately complex sample insurance bordereau containing dense tables, irregular structures, and domain-specific information&#8212;the kind of document that quickly exposes the limitations of conventional extraction approaches.</p><p>I also built a small test application that allowed users to upload a document and specify arbitrary information they wanted to extract, rather than working with a single predefined schema. This was not intended as a formal benchmark, but as a practical exploration of how Meibel behaves when confronted with realistic enterprise documents and changing information requirements. The observations in this dossier therefore combine documentation research with limited hands-on testing of the platform&#8217;s APIs.</p><h2><strong>Interesting technology, early-stage vendor</strong></h2><p>This dossier is deliberately not an endorsement.</p><p>Meibel was founded in 2024 and remains a comparatively small company. Its publicly visible customer base is limited, large-scale independent benchmarks are absent, detailed enterprise pricing is not publicly documented. Meibel is SOC 2 Type 2 and HIPPA compliant, accoring to information the company shared with me.</p><p>For a regulated enterprise, those questions matter just as much as the technical architecture.</p><p>On the other hand, deployment options including SaaS, bring your own cloud, and on-premises make the platform more interesting for environments in which data sovereignty matters.</p><p>My current assessment is therefore fairly simple:</p><p><strong>Meibel is not a technology I would standardize on without substantial further evaluation. But it belongs on the evaluation list when complex documents, provenance, and confidence-controlled AI automation are central to the problem.</strong></p><h2><strong>Get the full Technology Dossier</strong></h2><p>The full <strong>ETX2 Technology Dossier: Meibel AI</strong> goes considerably deeper.</p><p>It covers the company, product architecture, customer references, document intelligence, confidence scoring, graph-based retrieval, enterprise deployment, security considerations, competitive positioning, and a suggested evaluation approach.</p><p>The dossier draws on public documentation, analyst and press coverage, material published by Meibel, customer references, and my limited hands-on testing. It has not undergone exhaustive validation, and its conclusions should be independently verified before any procurement or architecture decision.</p><p><strong>Comment under the article or on LinkedIn when you are interested and I will send you the assessment.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/introducing-etx2-technology-dossiers/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.etx2.net/p/introducing-etx2-technology-dossiers/comments"><span>Leave a comment</span></a></p><p>That is also the philosophy behind the series: take an unfamiliar or interesting technology apart, document what I find, and share the result with people facing similar questions.</p><p>No rankings. No sponsored placements. No claim to cover the entire market.</p><p>Just a closer look beyond the AI conference headliners&#8212;and perhaps the occasional hidden gem.</p><p>Find out more about Meibel AI on their website: <a href="https://www.meibel.ai/">https://www.meibel.ai/</a></p><p><strong>ETX2 Technology Dossier #1 &#8212; Meibel AI</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">Enterprise Technology &amp; Excel Exorcism is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[ETX2 Lab: Monitor Claude Code Agent Teams with Application Insights and Grafana]]></title><description><![CDATA[Part 2 - Follow the Tokens]]></description><link>https://www.etx2.net/p/etx2-lab-monitor-claude-code-agent</link><guid isPermaLink="false">https://www.etx2.net/p/etx2-lab-monitor-claude-code-agent</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 02 Sep 2026 07:25:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ahn-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In <a href="https://etx2.substack.com/p/etx2-lab-claude-code-agent-teams">Part 1</a>, I set up Claude Code Agent Teams in a full-screen, multi-pane CLI on Windows.</p><p>Now for the less visible side of the experiment: <strong>What are all those agents doing - and how many tokens are they consuming?</strong></p><p>In this part, we send Claude Code telemetry to Azure Application Insights and inspect it in a Grafana dashboard.</p><p>The setup still runs natively on my Windows 11 ARM64 machine. No WSL required.</p><h2><strong>The architecture</strong></h2><p>Claude Code already emits telemetry using OpenTelemetry. A local Collector receives that data and forwards it to Azure. Grafana then queries the Application Insights data stored in Log Analytics.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!duqD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!duqD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 424w, https://substackcdn.com/image/fetch/$s_!duqD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 848w, https://substackcdn.com/image/fetch/$s_!duqD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 1272w, https://substackcdn.com/image/fetch/$s_!duqD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!duqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png" width="1456" height="655" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:655,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:124281,&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://etx2.substack.com/i/213821756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.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_!duqD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 424w, https://substackcdn.com/image/fetch/$s_!duqD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 848w, https://substackcdn.com/image/fetch/$s_!duqD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 1272w, https://substackcdn.com/image/fetch/$s_!duqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb26d062-93e6-4fd8-91df-d2cc69862181_1600x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>OpenTelemetry keeps the agent separate from the monitoring backend. Today I use Application Insights; the same OTLP stream could be routed elsewhere later.</p><h2><strong>1. Install the OpenTelemetry Collector</strong></h2><p>For the Azure Monitor exporter, use the <strong>contrib</strong> distribution. Because this lab runs on Snapdragon, use the ARM64 installer:</p><pre><code><code>$otelVersion = "0.158.0"
$otelMsi = "$env:TEMP\otelcol-contrib.msi"

irm "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v$otelVersion/otelcol-contrib_${otelVersion}_windows_arm64.msi" `
    -OutFile $otelMsi

Start-Process msiexec.exe -Verb RunAs -Wait `
    -ArgumentList "/i `"$otelMsi`""
</code></code></pre><p>The installer creates a Windows service and places the Collector under:</p><pre><code><code>C:\Program Files\OpenTelemetry Collector Contrib
</code></code></pre><p>Check that it is running:</p><pre><code><code>Get-Service otelcol-contrib
</code></code></pre><p>Then open <a href="http://localhost:8888/metrics">http://localhost:8888/metrics</a>. This endpoint shows the Collector&#8217;s own internal metrics - a quick confirmation that the process is 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_!hBZC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hBZC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!hBZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1133468,&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://etx2.substack.com/i/213821756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hBZC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!hBZC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1686322-10d3-46aa-a293-98d2b52ab33d_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U2vT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U2vT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!U2vT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:875793,&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://etx2.substack.com/i/213821756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U2vT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!U2vT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dec933-4b1a-4db9-b4b7-de557cc1ca80_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>2. Point Claude Code at the Collector</strong></h2><p>Set these variables in PowerShell <strong>before</strong> starting Claude Code:</p><pre><code><code>$env:CLAUDE_CODE_ENABLE_TELEMETRY="1"
$env:CLAUDE_CODE_ENHANCED_TELEMETRY_BETA="1"

$env:OTEL_METRICS_EXPORTER="otlp"
$env:OTEL_LOGS_EXPORTER="otlp"
$env:OTEL_TRACES_EXPORTER="otlp"

$env:OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
$env:OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
</code></code></pre><p>Claude Code will now send metrics, events and traces to the local OTLP/HTTP endpoint.</p><p>Claude Code records useful metadata such as prompt length, token usage and cost without sending the actual text. </p><h2><strong>3. Create Application Insights</strong></h2><p>You can use an existing workspace-based Application Insights resource. For this lab, I created one with Azure PowerShell.</p><p>Install the module and sign in:</p><pre><code><code>Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
Connect-AzAccount
</code></code></pre><p>My minimal creation script is:</p><pre><code><code>$resourceGroupName = "AI-Telemetry"
$resourceName = "AppInsights-AI"
$azureRegion = "germanywestcentral"

New-AzResourceGroup `
    -Name $resourceGroupName `
    -Location $azureRegion

New-AzApplicationInsights `
    -ResourceGroupName $resourceGroupName `
    -Name $resourceName `
    -Location $azureRegion `
    -Kind "web" `
    -ApplicationType "web"
</code></code></pre><p>Adjust the names and region, save the script as <code>CreateAppInsights.ps1</code>, and run it:</p><pre><code><code>.\CreateAppInsights.ps1
</code></code></pre><p>Azure automatically creates an associated Log Analytics workspace if you do not supply an existing one.</p><h2><strong>4. Forward the telemetry to Azure</strong></h2><p>In the Azure portal, open the Application Insights resource and copy its <strong>Connection String</strong> from the Overview page.</p><p>Replace the contents of the Collector&#8217;s <code>config.yaml</code> with this minimal configuration:</p><pre><code><code>receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4318
      grpc:
        endpoint: 0.0.0.0:4317

exporters:
  azuremonitor:
    connection_string: "&lt;YOUR APPLICATION INSIGHTS CONNECTION STRING&gt;"

service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [azuremonitor]
    metrics:
      receivers: [otlp]
      exporters: [azuremonitor]
    logs:
      receivers: [otlp]
      exporters: [azuremonitor]
</code></code></pre><p>Do not commit the connection string to a repository. You can find the connection string on the Overview pane in Azure Portal:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uSkn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uSkn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 424w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 848w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 1272w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!uSkn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png" width="1427" height="369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:369,&quot;width&quot;:1427,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43694,&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://etx2.substack.com/i/213821756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.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_!uSkn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 424w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 848w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 1272w, https://substackcdn.com/image/fetch/$s_!uSkn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c9a4b79-1b4f-4159-bb07-fd4e6b72c8ac_1427x369.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Validate the configuration and restart the service from an elevated PowerShell:</p><pre><code><code>$otelHome = "C:\Program Files\OpenTelemetry Collector Contrib"

&amp; "$otelHome\otelcol-contrib.exe" validate `
    --config "$otelHome\config.yaml"

Restart-Service otelcol-contrib
</code></code></pre><h2><strong>5. Generate some telemetry</strong></h2><p>Start Claude Code again in Agent Teams mode:</p><pre><code><code>claude --teammate-mode tmux
</code></code></pre><p>Give the team a task, let the agents work, and wait a few minutes for the data to reach Azure.</p><p>In the Azure portal, open:</p><p><strong>Application Insights -&gt; Dashboards with Grafana -&gt; Claude Code</strong></p><p>The dashboard shows sessions, prompts, API requests, tool activity, tokens and estimated cost - including the activity generated by subagents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ahn-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ahn-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 424w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 848w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ahn-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png" width="1456" height="938" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:938,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158533,&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://etx2.substack.com/i/213821756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.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_!ahn-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 424w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 848w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!ahn-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137394f4-746a-4037-8fb0-ebdf4da2dec8_1613x1039.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>The useful part starts here</strong></h2><p>The dashboard makes the multiplier effect of Agent Teams visible. A single user request can trigger several agents, several context windows and many model calls.</p><p>That does not make Agent Teams a bad idea. It makes observability part of the setup.</p><p>The cost figures reported by Claude Code are estimates, not billing records. But they are enough to compare sessions, identify expensive workflows and ask the question that matters:</p><p><strong>Did the additional agents create enough value to justify the additional model capacity?</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">Enterprise Technology &amp; Excel Exorcism is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[ETX2 Lab: Claude Code Agent Teams on Windows]]></title><description><![CDATA[Part 1 &#8212; From Fresh Windows Installation to a Multi-Agent CLI]]></description><link>https://www.etx2.net/p/etx2-lab-claude-code-agent-teams</link><guid isPermaLink="false">https://www.etx2.net/p/etx2-lab-claude-code-agent-teams</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Mon, 31 Aug 2026 15:59:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d9f56cd4-702c-422d-a7d7-5af3e440bd1f_1280x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Claude Code Agent Teams are fascinating to watch: one lead agent coordinates several independent Claude instances, each working in its own context.</p><p>There is just one small problem if you are a Windows user: the split-pane interface is built around <code>tmux</code>.</p><p>In this two-part ETX2 Lab, I&#8217;ll build the complete setup natively on Windows. In <strong>Part 1</strong>, we get Claude Code Agent Teams running in separate terminal panes. In <strong>Part 2</strong>, we will send its telemetry to Azure Application Insights and build a Grafana dashboard on top of it.</p><p>No WSL involved.</p><h3>Starting point</h3><p>For this lab I started with:</p><ul><li><p>Fresh Windows 11 Home installation</p></li><li><p>ARM64 / Snapdragon machine</p></li><li><p>Claude authentication through the interactive browser login</p></li><li><p>No Anthropic API key</p></li></ul><div><hr></div><h2>1. Install PowerShell 7</h2><p>Open a terminal and install the current PowerShell:</p><pre><code><code>winget install --id Microsoft.PowerShell --source winget
</code></code></pre><p>Then start <strong>PowerShell 7</strong> as Administrator.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SUnQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SUnQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SUnQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:705122,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SUnQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!SUnQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf39adb3-6e7c-47e7-aa14-4590f1963e4d_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eXMN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eXMN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eXMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:749161,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eXMN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!eXMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb52d2db9-def2-42b3-b157-925db9986cf2_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>2. Install Claude Code</h2><p>Anthropic provides a native Windows installer:</p><pre><code><code>irm https://claude.ai/install.ps1 | iex
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zPAN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zPAN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zPAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:757866,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zPAN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!zPAN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc472e1e5-6e43-4de0-bbae-5aa7d05ed531_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">ETX2 is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>3. Check the PATH</h2><p>Start a new PowerShell, then try:</p><pre><code><code>claude --version
</code></code></pre><p>If Windows cannot find Claude, add its installation directory to your <strong>user PATH</strong>:</p><pre><code><code>$currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')
[Environment]::SetEnvironmentVariable(
    'PATH',
    "$currentPath;$env:USERPROFILE\.local\bin",
    'User'
)
</code></code></pre><p>Restart PowerShell afterwards. Verify with </p><pre><code><code>claude --version</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fayn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fayn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!fayn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!fayn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!fayn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fayn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:689709,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fayn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!fayn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!fayn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!fayn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3133504-2251-41b4-bb63-d53f8fd5959d_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>4. Install psmux</h2><p>Claude&#8217;s split-pane Agent Teams UI expects <code>tmux</code>. On Windows, I use <strong>psmux</strong>, a native tmux-compatible terminal multiplexer. You will need to accept terms with Y during installation. </p><pre><code><code>winget install psmux
</code></code></pre><p>Start it:</p><pre><code><code>tmux
</code></code></pre><p>No Linux environment or WSL is required.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1qVD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1qVD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1qVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:894221,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1qVD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!1qVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F734c2a02-4125-4417-9161-7a1da7ab4bc6_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6ZfB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ZfB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ZfB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:662584,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6ZfB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!6ZfB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67452174-0305-4f72-921e-7b892ab4ed61_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>5. Create a project</h2><p>For this test I use an empty directory:</p><pre><code><code>md C:\dev\ClaudeCodeTest
cd C:\dev\ClaudeCodeTest
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jezb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jezb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!jezb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!jezb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!jezb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jezb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:698736,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jezb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!jezb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!jezb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!jezb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e7789b3-2dae-4b63-a53e-33c0a9044887_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>6. Install VS Code</h2><pre><code><code>winget install -e --id Microsoft.VisualStudioCode
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c637!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c637!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!c637!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!c637!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!c637!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!c637!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/deaa0869-b304-4495-80fa-503881163653_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:698736,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c637!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!c637!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!c637!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!c637!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaa0869-b304-4495-80fa-503881163653_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>7. Start Claude Code</h2><p>From the project directory:</p><pre><code><code>claude
</code></code></pre><p>On the first run, Claude guides you through authentication. I use my Claude account and authenticate interactively in the browser rather than supplying an API key.</p><p>Claude asks a few questions and then heads over to the authentication in the browser. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!95oy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!95oy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!95oy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!95oy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!95oy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!95oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:818041,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!95oy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!95oy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!95oy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!95oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe9dcc7-be76-4e1a-8e7e-e904f2f83f06_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AQCk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AQCk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AQCk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:778590,&quot;alt&quot;:&quot;&quot;,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.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_!AQCk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!AQCk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb2525d3-3b44-4904-9b03-f4118635b886_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yjfl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yjfl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yjfl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:729322,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yjfl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!yjfl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43445276-8b5d-4deb-8e20-0dc8387cc6b9_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Make sure you trust the folder you are in:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pZ01!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pZ01!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!pZ01!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:784556,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pZ01!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!pZ01!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffefd16a8-f992-44b8-a8f9-e2a9d43cd9da_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Exit Claude again after the initial setup with /exit in the prompt: </p><pre><code><code>/exit</code></code></pre><div><hr></div><h2>8. Enable Agent Teams</h2><p>Agent Teams are currently an experimental Claude Code feature and disabled by default.</p><p>Enable them for the current PowerShell session:</p><pre><code><code>$env:CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
</code></code></pre><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DWRO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 424w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 848w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 1272w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!DWRO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png" width="592" height="59" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:59,&quot;width&quot;:592,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33439,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.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_!DWRO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 424w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 848w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 1272w, https://substackcdn.com/image/fetch/$s_!DWRO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1cc74ff-eb03-4973-a6f3-e880f6454d3d_592x59.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p></p><div><hr></div><h2>9. Start Claude in split-pane mode</h2><p>Now launch Claude Code with the tmux teammate interface. Claude might ask whether to try the fullscreen renderer. </p><pre><code><code>claude --teammate-mode tmux</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ybjc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ybjc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ybjc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:821568,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ybjc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!Ybjc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb934ce1-82ce-4ec5-9343-eecf6788d2f2_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>10. Give the team some work</h2><p>The final step is the fun one.</p><p>Ask Claude to create an agent team and give the teammates work that can be performed in parallel&#8212;for example architecture, implementation and testing. A dramatically reduced version could read like this:</p><p><code>I&#8217;m designing a new web application. Spawn three agents: the first one acts as a project manager and refines the requirements. The second one as developer and the third one as tester.</code></p><p>Claude will probably ask a set of questions about the details. Once Claude creates the team, psmux opens the individual Claude sessions in separate panes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O98O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O98O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!O98O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!O98O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!O98O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!O98O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:647713,&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://etx2.substack.com/i/213563590?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O98O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!O98O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!O98O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!O98O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5402982-dc52-4188-bcb2-2c1e91da5ce2_1280x800.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And that&#8217;s it: <strong>Claude Code Agent Teams running natively on Windows in a multi-pane CLI.</strong></p><h2>Next: Where are all those tokens going?</h2><p>Multiple agents also mean multiple context windows, prompts, tool calls and potentially substantial token consumption.</p><p>So simply getting Agent Teams to work is only half the experiment.</p><p>In <strong>Part 2</strong>, I&#8217;ll connect Claude Code&#8217;s OpenTelemetry output to <strong>Azure Application Insights</strong> and use <strong>Grafana</strong> to visualize what the agent team is actually doing&#8212;and what it costs.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/etx2-lab-claude-code-agent-teams?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Enterprise Technology &amp; Excel Exorcism! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/etx2-lab-claude-code-agent-teams?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.etx2.net/p/etx2-lab-claude-code-agent-teams?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Your AI Coding Assistant Is Becoming a Cloud Bill]]></title><description><![CDATA[Agentic coding is turning a predictable software license into a variable infrastructure cost. Enterprises may soon need FinOps for developers.]]></description><link>https://www.etx2.net/p/your-ai-coding-assistant-is-becoming</link><guid isPermaLink="false">https://www.etx2.net/p/your-ai-coding-assistant-is-becoming</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Sun, 30 Aug 2026 05:38:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/474d85e9-2327-4677-a2ec-f323eeb793d4_868x481.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the first few years of generative AI in software development, the economics looked refreshingly simple. GitHub Copilot: roughly the price of another SaaS seat. ChatGPT: another monthly subscription. Multiply the number of developers by the price per user, put the number into the software budget, and move on.</p><p>That model is disappearing.</p><div><hr></div><p><em>I explored the market for AI coding cost management in considerably more detail in the accompanying <strong>ETX2 Technology Brief: &#8220;The Emerging Landscape of Cost Management for AI-Driven Software Development.&#8221;</strong> It includes the four-layer market taxonomy, current pricing and cost ranges, hyperscaler and monitoring-platform comparisons, a survey of purpose-built AI FinOps products, OpenTelemetry developments, and practical cost-management strategies.</em></p><p><em>The data and product landscape are current as of August 2026; given how rapidly AI pricing and tooling are evolving, consider the brief a point-in-time market snapshot rather than an evergreen catalogue.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/subscribe?&quot;,&quot;text&quot;:&quot;Upgrade&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">This post has bonus content for paid subscribers. Upgrade to get full access.</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="Upgrade"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>As coding assistants evolve into coding agents, they consume much more compute. They read repositories, reason over large contexts, modify multiple files, run tools, call other agents, test their own work and sometimes continue operating for extended periods without human intervention.</p><p>And somebody has to pay for all those tokens.</p><p>During 2026, the market has been moving decisively away from the idea that sophisticated AI coding can be offered as essentially unlimited usage behind a $20 subscription. GitHub, OpenAI, Anthropic, Cursor and others now combine subscriptions, usage allowances, credits, token consumption or considerably more expensive power-user plans.</p><p>The result is an interesting shift.</p><p>AI coding tools are starting to look less like software licenses and more like cloud infrastructure.</p><p>And that means engineering organizations may have to learn a lesson that IT infrastructure teams learned years ago: Consumption without cost attribution eventually becomes a problem<strong>.</strong></p><h2>The seat price is the floor</h2><p>The headline prices for AI coding tools still look inexpensive.</p><p>GitHub Copilot starts around the price of a normal developer productivity tool. Cursor and Claude offer entry-level subscriptions around $20. Even $100 or $200 power-user tiers don&#8217;t look particularly dramatic when compared with the fully loaded cost of a software engineer.</p><p>But the subscription price increasingly tells only part of the story.</p><p>Research cited in the paper suggests that organizations combining inline coding assistance with more agentic workflows can end up spending around $200&#8211;$600 per developer per month. Anthropic has reported enterprise Claude Code usage averaging around $150&#8211;$250 per developer per month.</p><p>At the extreme end, Gartner warned in June 2026 that heavy agentic coding workloads can reach thousands of dollars per developer per month, with exceptional cases much higher.</p><p>Those extreme numbers obviously should not be interpreted as the typical cost of using an AI coding assistant.</p><p>But they reveal something important.</p><p>A developer clicking &#8220;accept&#8221; on an autocomplete suggestion and an autonomous agent spending hours iterating over a repository are technically both using an &#8220;AI coding tool.&#8221;</p><p>Economically, they are completely different workloads.</p><p>That distinction becomes increasingly important as agentic development matures.</p><h2>More tokens don&#8217;t automatically mean more productivity</h2><p>There is another reason why this matters.</p><p>If additional AI consumption reliably produced proportional improvements in engineering output, managing token cost would mostly be an accounting exercise.</p><p>Spend twice as much, produce twice as much software.</p><p>Unfortunately, the evidence does not suggest such a clean relationship.</p><p>One large study cited in the survey, covering more than 400 organizations over 14 months, reported a median increase in pull-request throughput of <strong>7.76%</strong>, with many teams seeing improvements in roughly the 5&#8211;15% range.</p><p>That is useful.</p><p>It can easily justify several hundred dollars of additional tooling cost for a developer whose fully loaded employment cost runs into five figures per month.</p><p>But it is very different from assuming that AI turns every developer into three developers.</p><p>More importantly, Gartner&#8217;s warning is that there is no direct relationship between increasing token consumption and increasing productivity.</p><p>That creates what I would call the marginal-token problem.</p><p>The first few dollars of AI consumption may be extremely valuable. They eliminate tedious work, accelerate exploration or generate useful boilerplate.</p><p>The next hundred dollars may still produce substantial value.</p><p>But what about the next thousand?</p><p>At some point, running another agent, adding another reasoning loop or feeding even more context into a model may increase the bill without producing a corresponding improvement in shipped software.</p><p>Which means that simply measuring AI usage isn&#8217;t enough.</p><p>We need to connect consumption to engineering outcomes.</p><h2>Cloud FinOps all over again</h2><p>There is an obvious precedent.</p><p>When enterprises moved from owned infrastructure to public cloud, computing changed from something organizations purchased upfront into something they continuously consumed.</p><p>Technically, this was enormously powerful.</p><p>Financially, it created new problems.</p><p>Individual teams could provision infrastructure in minutes. Costs became distributed across thousands of resources. Bills became difficult to explain. And organizations discovered that giving engineers almost frictionless access to effectively unlimited computing resources could produce some interesting invoices.</p><p>FinOps emerged to answer seemingly simple questions:</p><p>Where is the money going?</p><p>Who is consuming it?</p><p>Which application is responsible?</p><p>AI coding is beginning to create a remarkably similar challenge. The difference is that the unit of consumption isn&#8217;t a virtual machine or storage volume.</p><p>It is increasingly an AI agent performing work, which makes attribution harder.</p><p>Knowing that the development organization consumed 12 billion tokens this month is not particularly useful.</p><p>Knowing that &#8364;18,000 was spent on AI-assisted development is somewhat better.</p><p>Knowing that &#8364;4,300 was spent on Project A is better still.</p><p>But the really interesting question is: What did that &#8364;4,300 actually produce?</p><h2>An AI FinOps stack is emerging</h2><p>While researching the market, I found that AI cost management is already starting to stratify into several layers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3LjN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3LjN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3LjN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png" width="1456" height="1460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67341e89-94f5-40de-843f-837930edda91_2639x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8526688,&quot;alt&quot;:&quot;&quot;,&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://etx2.substack.com/i/213042887?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.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_!3LjN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!3LjN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67341e89-94f5-40de-843f-837930edda91_2639x2646.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I find it useful to think about four layers.</p><h3>Layer 1: The AI providers</h3><p>OpenAI, Anthropic and other model providers increasingly expose usage dashboards, APIs, project or workspace segmentation, spending limits and cost reporting.</p><p>This is the obvious starting point.</p><p>If all your development AI goes through one provider and a small number of API keys, native tooling may be sufficient.</p><p>The limitation is equally obvious: each provider sees only its own consumption.</p><h3>Layer 2: The cloud platforms</h3><p>Azure, AWS and Google Cloud add another level of context.</p><p>Azure combines Application Insights, Azure Monitor and API Management. AWS connects Bedrock telemetry with CloudWatch, inference profiles and Cost Explorer. Google increasingly integrates AI consumption with its broader Cloud Billing and monitoring capabilities.</p><p>This starts to look much more like classical FinOps.</p><p>Teams can allocate costs, detect anomalies, build dashboards and connect AI consumption with the wider infrastructure estate.</p><p>For enterprises already consuming models through their hyperscaler, this may become the natural control plane.</p><h3>Layer 3: Enterprise observability</h3><p>Then there are the platforms many enterprises already use to monitor distributed applications.</p><p>Datadog, Grafana, New Relic, Dynatrace, Splunk and Elastic are extending their observability stacks to understand generative AI.</p><p>Instead of monitoring only latency, errors and request volumes, they can increasingly trace model calls, token consumption, tool calls and estimated inference cost.</p><p>This is particularly interesting because AI agents are ultimately distributed systems.</p><p>A single agent request may trigger several model calls, invoke tools, query data, call APIs and initiate other agents.</p><p>Looking only at the final token bill tells you very little about what actually happened.</p><h3>Layer 4: Purpose-built AI FinOps</h3><p>The newest category is perhaps the most interesting.</p><p>A growing collection of startups is trying to connect AI expenditure directly to software engineering work.</p><p>Some attribute Claude Code or other coding-agent sessions to developers, repositories, branches or tickets. Others reconcile usage across multiple AI vendors. Some try to connect spend with story points, delivery metrics, rework rates or engineering outcomes.</p><p>This is where AI FinOps starts becoming something meaningfully different from traditional cloud cost management.</p><p>The important unit isn&#8217;t necessarily:</p><p><strong>Cost per million tokens.</strong></p><p>It might be:</p><p><strong>AI cost per feature delivered.</strong></p><p>Or:</p><p><strong>AI cost per resolved ticket.</strong></p><p>Or perhaps eventually:</p><p><strong>AI cost per unit of business value created.</strong></p><p>That is a much harder measurement problem.</p><p>But it is also the one that ultimately matters.</p><h2>OpenTelemetry could become surprisingly important</h2><p>There is another development in this space that deserves attention: the emerging <strong>OpenTelemetry GenAI Semantic Conventions</strong>.</p><p>OpenTelemetry already provides a vendor-neutral way to instrument distributed applications.</p><p>The GenAI conventions extend that model with concepts such as model calls, token counts, tool invocations and other generative-AI-specific telemetry.</p><p>Azure has adopted OpenTelemetry heavily for AI monitoring. Grafana uses it through OpenLIT. Langfuse and Traceloop support it, and AWS supports related telemetry scenarios as well.</p><p>This matters because instrumentation may ultimately be more strategic than the dashboard sitting on top of it.</p><p>If organizations standardize how AI activity is captured, they can route that telemetry into Application Insights today, Grafana tomorrow and another cost-management platform later.</p><p>For enterprises trying to avoid yet another observability silo, that is an attractive proposition.</p><h2>What should enterprises do today?</h2><p>The market is still immature, so buying another platform may not be the first step.</p><p>The more important change is conceptual.</p><p>Treat AI coding consumption as something that needs engineering and financial governance from day one.</p><p>That means establishing spending limits before broad rollout rather than after the first surprising invoice.</p><p>Measure real consumption for several months before negotiating enterprise commitments.</p><p>Consider moving very heavy users onto predictable flat-rate plans where appropriate.</p><p>Separate teams, projects and workloads so that costs can actually be attributed.</p><p>Use cheaper models for routine work and reserve expensive reasoning models for tasks that justify them.</p><p>And above all, don&#8217;t monitor AI expenditure in isolation.</p><p>Track rework. Track defects. Track throughput. Track delivery outcomes.</p><p>Then ask whether additional AI consumption correlates with improvements in those measures.</p><p>Because there is a dangerous metric hiding in every AI dashboard: Token consumption can go up even when value doesn&#8217;t.</p><h2>From AI adoption to AI economics</h2><p>For the last few years, the enterprise conversation around coding assistants has largely been about adoption.</p><p>Should developers be allowed to use them?</p><p>Which model performs best?</p><p>Can the tools access proprietary source code safely?</p><p>How much faster will developers become?</p><p>Those remain important questions.</p><p>But agentic development introduces another one:</p><p>What happens when AI starts consuming meaningful amounts of money while doing the work?</p><p>At that point, selecting an AI coding tool is no longer just a developer-experience decision. It becomes an economic architecture decision.</p><p>And the organizations that deploy hundreds or thousands of coding agents will eventually need to understand those agents much the same way they understand their cloud infrastructure:</p><p>who is using them, what they are doing, what they cost, and whether the result justifies the consumption.</p><p>The era of the $20 AI coding assistant isn&#8217;t necessarily over.</p><p>But increasingly, $20 is the entry price, not the cost model.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Your AI Agents Can Talk. Now Comes the Hard Part.]]></title><description><![CDATA[Agent protocols are maturing. But orchestration is turning into a distributed-systems problem.]]></description><link>https://www.etx2.net/p/your-ai-agents-can-talk-now-comes</link><guid isPermaLink="false">https://www.etx2.net/p/your-ai-agents-can-talk-now-comes</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Mon, 24 Aug 2026 04:37:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e20056fd-3fa8-412d-aa5b-5d6cf6ef0db1_737x533.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At Ai4 in Las Vegas, I attended a session titled <strong>&#8220;Is Orchestration the Future?&#8221;</strong> by <strong>Arick Goomanovsky, CEO of BAND</strong>, as part of the conference&#8217;s <em>Infrastructure: AI Agents</em> track.</p><p>The session description nicely captured where the industry seems to be heading: from standalone LLMs handling individual tasks, through orchestrated agentic workflows, toward fully autonomous distributed networks where agents independently reason, delegate and collaborate across organizational boundaries.</p><p>That sounds like the natural next step for agentic AI.</p><p>It also creates a very different class of engineering problems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!25s5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!25s5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!25s5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!25s5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!25s5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!25s5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png" width="1456" height="1460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5603117,&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://etx2.substack.com/i/211964842?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.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_!25s5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!25s5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!25s5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!25s5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e6c7075-56b2-4cae-9725-3a21a728f285_2639x2646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The demo during the session was playful: one agent asked other specialist agents for help, they exchanged information, and together they worked toward a result.</p><p>But the interesting part was not the demo. It was the problem hidden behind it.</p><p>As soon as you use several agents, the human can easily become the integration layer: copying context between agents, checking one agent&#8217;s work with another, restarting tasks, and trying to remember what each agent is doing. Goomanovsky described exactly this pattern in software development: one agent creates a plan, another reviews it, perhaps another writes or reviews code&#8212;and the developer ends up manually coordinating the conversation.</p><p>That does not scale.</p><p>One of the most useful distinctions from the session was simple:</p><p><strong>Communication is not collaboration.</strong></p><p>Giving two agents a way to send messages to each other does not mean they can reliably execute a business process together.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! Subscribe for free to receive new posts and an exclusive AI-engineering review.</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>The protocol layer is finally taking shape</h2><p>This is where the emerging communication protocols matter.</p><p><strong>MCP &#8212; the Model Context Protocol &#8212;</strong> has become an important standard for connecting AI applications to tools, data sources and services.</p><p>Conceptually, MCP solves something similar to what standardized peripheral interfaces did for computers: instead of every agent requiring custom integration code for every system, tools can expose capabilities through a common protocol.</p><p>MCP was initially mostly about <strong>agent-to-tool</strong> interaction rather than collaboration between autonomous agents. But it has continued to evolve. The July 2026 specification introduced a stateless protocol core, Multi Round-Trip Requests and an extension mechanism for durable Tasks&#8212;features that make MCP increasingly relevant to long-running agentic workflows. (<a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/">Model Context Protocol</a>)</p><p>For communication between independent agents, A2A &#8212; Agent2Agent &#8212; addresses the problem more directly.</p><p>Originally developed by Google and subsequently moved under Linux Foundation governance, A2A defines concepts such as Agent Cards for discovery, Tasks, Messages, Artifacts, streaming and asynchronous notifications. (<a href="https://a2a-protocol.org/latest/topics/key-concepts/">A2A Protocol</a>)</p><p>The distinction is useful:</p><p>MCP helps an agent use capabilities. A2A helps agents collaborate with other agents.</p><p>The protocols are therefore more complementary than competitive. (<a href="https://a2a-protocol.org/latest/">A2A Protocol</a>)</p><p>There are also signs that the standards landscape is consolidating. IBM&#8217;s Agent Communication Protocol, ACP, for example, has been merged into A2A rather than developing into another competing ecosystem. (<a href="https://www.ibm.com/think/topics/agent-communication-protocol">IBM</a>)</p><p>That reduces one interoperability problem.</p><p>But interoperability is only the first layer.</p><h2>Welcome back to distributed systems</h2><p>The moment agents start operating independently, orchestration becomes a distributed-systems problem.</p><p>Interestingly, that was also explicit in Goomanovsky&#8217;s talk. The session touched on message delivery, message ordering, recovering an agent after a crash and restoring the state of an existing conversation.</p><p>None of these are new problems.</p><p>Software engineers have been fighting them for decades.</p><p>AI adds another complication: not only can the network or infrastructure behave unexpectedly&#8212;the participant itself is probabilistic.</p><p>Consider a simple example.</p><p>Agent A asks Agent B:</p><p><strong>&#8220;Execute this transaction.&#8221;</strong></p><p>B performs the action, but the response gets lost.</p><p>A waits.</p><p>Eventually it times out.</p><p>What should it do?</p><p>If it retries, has the transaction now happened once&#8212;or twice?</p><p>For a weather lookup, this hardly matters.</p><p>For &#8220;send &#8364;50,000,&#8221; &#8220;cancel the insurance policy,&#8221; or &#8220;email the customer,&#8221; it matters enormously.</p><p>Classic distributed systems use patterns such as idempotent operations, unique request identifiers, durable messaging, acknowledgements, retries with exponential backoff, timeouts and circuit breakers to deal with exactly these situations.</p><p>Agent architectures will need the same engineering discipline.</p><h2>Your context window is not a transaction log</h2><p>State is another fundamental problem.</p><p>Imagine an agent executing a workflow consisting of twenty steps. It completes twelve and then crashes.</p><p>When another instance takes over, what happens?</p><p>Simply replaying the original prompt is dangerous. Some actions may already have happened.</p><p>A production system needs to know:</p><ul><li><p>which task is being executed,</p></li><li><p>which steps have completed,</p></li><li><p>which external actions have occurred,</p></li><li><p>what results were returned,</p></li><li><p>which approvals were granted,</p></li><li><p>and what remains to be done.</p></li></ul><p>That information needs to exist independently of the model.</p><p>An LLM context window is not a durable workflow store.</p><p>This is one reason I would be cautious about architectures based entirely on autonomous peer-to-peer conversations between agents.</p><p>They look elegant in demonstrations. But the more autonomous the network becomes, the harder it becomes to reconstruct causality when something goes wrong.</p><p>For enterprise applications, a hybrid architecture may often be more practical.</p><p>Agents can still reason and act autonomously, while a durable orchestration layer owns workflow state, task dependencies, permissions, retries and completion criteria.</p><p>In other words, decentralize intelligence without necessarily decentralizing control.</p><h2>Orchestration also means observability</h2><p>There is another challenge from the session that I think deserves more attention: once many agents work autonomously, how do you actually know what they are doing?</p><p>The transcript describes the problem from a developer perspective. Several agents can continue working while the developer is doing something else. When the developer returns, it becomes difficult to understand where each agent is, what it has done and how much resource it has consumed.</p><p>Multiply that by a thousand employees.</p><p>Now it becomes an enterprise-management problem.</p><p>Agentic platforms therefore need something resembling distributed tracing.</p><p>Every business request should ideally carry a correlation or trace ID through the communication chain, from the user over AI agents down to the business system. </p><p>That allows the enterprise to answer questions such as:</p><p>What happened?</p><p>Why did it happen?</p><p>Which agent made the decision?</p><p>Which model was used?</p><p>Which tools were called?</p><p>How many retries occurred?</p><p>How much did the process cost?</p><p>And where did it fail?</p><p>OpenTelemetry has already started defining GenAI semantic conventions for tracing model calls, tool executions, token consumption and other AI operations. </p><p>This may sound like infrastructure plumbing.</p><p>But without it, diagnosing an agent system means reading conversations and hoping to reconstruct what happened.</p><p>That is roughly equivalent to debugging a distributed application by reading terminal output from several servers.</p><h2>The protocol is not the architecture</h2><p>MCP and A2A are important developments.</p><p>They reduce integration friction and make it increasingly realistic that an agent created on one platform can access tools&#8212;or cooperate with an agent&#8212;created somewhere else.</p><p>But protocols do not solve orchestration.</p><p>They do not decide which agent should be trusted with a task.</p><p>They do not determine who owns the business outcome.</p><p>They do not prevent duplicate transactions.</p><p>They do not stop two agents from entering an expensive reasoning loop.</p><p>They do not decide when a human has to intervene.</p><p>And they do not tell management why a swarm of agents consumed &#8364;20,000 worth of model tokens last Tuesday.</p><p>Those are architecture, operations and governance problems.</p><p>This is why the progression described in the Ai4 session&#8212;from standalone models to orchestrated workflows and eventually autonomous distributed agent networks&#8212;is so interesting.</p><p>With every step, we gain autonomy.</p><p>But we also inherit more of the complexity traditionally associated with distributed computing.</p><p>The first wave of agent development was largely about prompts, tools and reasoning.</p><p>The next wave will increasingly be about state machines, message semantics, identity, retries, observability, access control, cost management and recovery.</p><p>Which leads to a slightly paradoxical conclusion:</p><p>Making agents intelligent may turn out to be the easy part.</p><p>Making hundreds of intelligent agents work together reliably is where the real engineering starts.</p>]]></content:encoded></item><item><title><![CDATA[The AI ROI Illusion: Why Value Starts With the Workflow, Not the Model ]]></title><description><![CDATA[At Ai4 in Las Vegas, two sessions approached the same uncomfortable question from different directions: where is the business value from AI?]]></description><link>https://www.etx2.net/p/the-ai-roi-illusion-why-value-starts</link><guid isPermaLink="false">https://www.etx2.net/p/the-ai-roi-illusion-why-value-starts</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 19 Aug 2026 07:51:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bbc596f2-dc17-4bbc-8cf6-5ff00fe7d9bf_1191x597.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI investment is growing rapidly. Pilots are everywhere. Agents are becoming the default answer to almost every enterprise technology question.</p><p>And yet there is an increasingly awkward question hanging over all of this activity:</p><p><strong>Where is the ROI?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V6-V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V6-V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V6-V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png" width="1456" height="1460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8031736,&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://etx2.substack.com/i/211449081?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.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_!V6-V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!V6-V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9a002d-8956-4061-8176-8b7e956df03f_2639x2646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At Ai4 in Las Vegas, I attended two sessions that addressed exactly this problem.</p><p>The first was Guru Bhat&#8217;s <em>&#8220;The ROI Illusion: Why Most Enterprise AI Isn&#8217;t Paying Off.&#8221;</em> His argument was that enterprises often start AI transformation at the wrong level: with models and isolated use cases rather than the business workflow.</p><p>A few hours later, Sai Maddineni approached the same problem from an insurance perspective in <em>&#8220;Insurance Industry&#8217;s AI Value Problem: The Reality of Unit Economics, Reliability and Auditability.&#8221;</em> His question was more fundamental: just because AI <strong>can</strong> perform a task, does that mean AI <strong>should</strong> perform it?</p><p>Together, the two perspectives form a useful framework: understand the workflow first, then decide where AI actually belongs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! Subscribe for free and download an exclusive empirical review of AI-assisted software engineering.</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>Stop starting with the AI use case</h2><p>Bhat&#8217;s central argument was simple:</p><p>Don&#8217;t start with the use case. Start with the workflow.</p><p>Enterprises typically create lists of AI opportunities, rank them according to value and feasibility, and launch pilots. But a business workflow may contain many individual tasks and several potential AI use cases. Optimizing one convenient task does not necessarily improve the outcome of the workflow as a whole.</p><p>Think about underwriting. Document ingestion, data extraction, risk analysis, pricing, referrals, approvals and customer communication may all belong to the same workflow. Automating document summarization may save time, but that does not automatically mean the underwriting process becomes materially better.</p><p>The more useful starting point is:</p><p>What business outcome are we trying to change in this workflow?</p><p>Only then should we identify the places where AI can contribute.</p><h2>ROI has to be designed in</h2><p>Bhat also challenged the way enterprises measure AI success.</p><p>Number of users. Number of pilots. Number of tokens consumed. These may be useful activity metrics, but they are not ROI.</p><p>He proposed moving from adoption to proficiency &#8212; whether AI actually changes the speed or effectiveness of work &#8212; and finally to financial outcomes. He also argued that AI value is broader than conventional efficiency measures and can include work velocity, revenue uplift, risk and compliance.</p><p>This means the baseline and the expected outcome need to be defined before the solution is built.</p><p>Ten thousand employees using an AI assistant is an impressive adoption figure.</p><p>It is not yet a business case.</p><p>The economics also extend to the technology itself. Bhat questioned whether frontier models should be used for every task. Different activities may justify different models, costs and levels of intelligence, which points toward an orchestration layer capable of selecting the appropriate model and grounding it in enterprise data.</p><p>For agentic systems, he went further and emphasized knowledge graphs as a way to give agents the relationships and enterprise context needed to act on grounded information rather than isolated pieces of data.</p><p>So architecture itself becomes part of the ROI equation.</p><h2>Just because AI can do it doesn&#8217;t mean it should</h2><p>Maddineni attacked the problem from a different direction.</p><p>He opened with a deliberately trivial experiment: asking leading AI models to perform a simple calculation and comparing their cost with a small traditional Java program doing the same thing.</p><p>Both produced the answer. But according to his experiment, the AI approach was dramatically more expensive.</p><p>His point was not about arithmetic. It was about using the right technology for the right kind of work.</p><p>Insurance companies execute huge volumes of deterministic activities: eligibility rules, coverage checks, calculations, validations and other tasks where identical input should produce identical output.</p><p>An AI agent can perform many of these activities.</p><p>But why should it?</p><p>Technical capability is not the same as economic suitability.</p><h2>Insurance contains different kinds of work</h2><p>Maddineni described work as a spectrum.</p><p>At one end are deterministic, rules-based activities. At the other are activities that depend heavily on judgement, interpretation, experience and relationships.</p><p>A large part of insurance work is quantifiable and rule-driven. Yet much of it has never been fully automated, not because traditional software cannot execute the rules, but because the information surrounding them often arrives in difficult forms: PDFs, spreadsheets, emails and non-standard documents. Humans have effectively acted as the integration layer between structured systems and an unstructured world.</p><p>Generative AI changes this dramatically.</p><p>But that doesn&#8217;t necessarily mean the entire process should become generative AI.</p><p>For deterministic, high-volume activity, traditional software still has major advantages: predictable execution, reliability, auditability and low marginal cost. Maddineni therefore suggested an interesting alternative:</p><p>Use AI to build the software rather than using AI to be the software.</p><p>AI-assisted development can dramatically reduce implementation effort while allowing developers to review the resulting code, QA teams to test it and enterprises to operate deterministic software at scale.</p><p>Sometimes the best AI solution may therefore result in a production system where no LLM is involved in the actual transaction.</p><h2>Where generative AI really fits</h2><p>The picture changes when the work itself is cognitive and unstructured.</p><p>Maddineni used underwriting as an example. An underwriter may receive a large broker submission containing PDFs, financial data, schedules and correspondence. Simply understanding and structuring the submission may take significant time.</p><p>AI can summarize, extract and contextualize that material in seconds, allowing the underwriter either to handle more submissions or to spend more time on risk analysis and pricing.</p><p>And then there is a third category: work where humans should remain central.</p><p>When somebody has just lost a home in a catastrophe, the conversation with the insurer is not merely another process step. Empathy, reassurance and trust are part of the service itself. Maddineni argued that these human relationships should not disappear simply because an agent could technically handle the interaction.</p><p>That leads to a much more useful transformation question than <em>&#8220;Where can we deploy an agent?&#8221;</em></p><p>For each activity, ask:</p><p>Should this be conventional software? Should AI augment it? Or should a human continue doing it?</p><h2>Decompose first, automate second</h2><p>This is where the two sessions converge.</p><p>Bhat says: start with the workflow, not the use case.</p><p>Maddineni says: break that workflow into individual activities and decide what belongs with software, AI or humans.</p><p>His recommendation was refreshingly practical: take an important, high-volume process, bring in the people who actually perform the work, understand its inputs and outputs, and decompose it into its individual parts.</p><p>From there, the architecture becomes much clearer:</p><ul><li><p>Deterministic and high-volume: conventional software, increasingly built with AI assistance.</p></li><li><p>Cognitive and unstructured: generative AI, often augmenting human expertise.</p></li><li><p>Judgement, empathy and relationships: keep humans at the center.</p></li></ul><p>Across all three, Bhat&#8217;s question still applies:</p><p><strong>What measurable business outcome does changing this workflow create?</strong></p><h2>The real AI ROI illusion</h2><p>Perhaps the AI ROI problem is therefore not primarily an AI problem.</p><p>It is a transformation problem.</p><p>Enterprises often start with technology, search for use cases, launch pilots and measure adoption. Only later do they ask whether the economics work.</p><p>Both sessions suggested reversing that logic.</p><p>Understand the workflow. Establish the baseline. Define the business outcome. Decompose the work. Decide where deterministic software, probabilistic AI and human judgement each belong. Then measure whether the redesigned workflow actually performs better.</p><p>And don&#8217;t restrict &#8220;better&#8221; to cost reduction.</p><p>Maddineni closed by arguing that freeing underwriters, actuaries and other specialists from administrative work can create space for better risk analysis, new products and competitive differentiation.</p><p>That may be the most useful way to think about AI ROI:</p><p><strong>The winners will probably not be the companies deploying the most AI. They will be the companies that understand their business deeply enough to know exactly where AI creates value &#8212; and where it doesn&#8217;t.</strong></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/the-ai-roi-illusion-why-value-starts?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">If you liked this post, share it with colleagues.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/the-ai-roi-illusion-why-value-starts?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.etx2.net/p/the-ai-roi-illusion-why-value-starts?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div>]]></content:encoded></item><item><title><![CDATA[Your RAG System Found the Right Data. Unfortunately, It Doesn’t Know What It Means.]]></title><description><![CDATA[Why data dictionaries, semantic models and ontologies are becoming core infrastructure for enterprise AI]]></description><link>https://www.etx2.net/p/your-rag-system-found-the-right-data</link><guid isPermaLink="false">https://www.etx2.net/p/your-rag-system-found-the-right-data</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Wed, 12 Aug 2026 13:33:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ed3b0b69-c4db-4e39-9e10-c63abb86f61c_575x243.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ask an AI assistant a seemingly simple question:</p><p><strong>&#8220;What was our revenue last month?&#8221;</strong></p><p>In many companies, that question does not have one obvious answer.</p><p>Sales may think about booked revenue. Finance may look at invoiced revenue. Another function may use recognized revenue. Different systems may contain different versions of the number, each perfectly reasonable in its own context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9soD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9soD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!9soD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!9soD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!9soD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9soD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png" width="1456" height="1460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7910902,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://etx2.substack.com/i/210856794?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.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_!9soD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 424w, https://substackcdn.com/image/fetch/$s_!9soD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 848w, https://substackcdn.com/image/fetch/$s_!9soD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!9soD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff059af82-55bf-4987-a23b-178c1b79e478_2639x2646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A human employee who has worked in the company for ten years may know which definition to use. An AI agent does not.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! 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>This was one of the points that stuck with me from a session at the Ai4 conference in Las Vegas, presented by the CTO of SIXT. The company has invested heavily in AI, but one of its early findings was that the difficult part was often not building the AI itself. Much of the effort went into understanding the surrounding enterprise: What does this data mean? Where does it live? How can it be accessed? How does the process work? Which systems are involved, and how do they connect?</p><p>That is an important lesson for anyone currently building Retrieval-Augmented Generation systems or AI agents.</p><p><strong>RAG can help an AI find information. It does not necessarily help the AI understand what the information means.</strong></p><p>And as enterprises move from chatbots that answer questions to agents that take actions, that distinction becomes critical.</p><h2>Retrieval is only the first layer of context</h2><p>The basic idea behind RAG is compelling.</p><p>Instead of expecting a large language model to know everything, we give it access to relevant enterprise information. Documents are indexed, often converted into embeddings and stored in a vector database. When the user asks a question, the system retrieves relevant information and adds it to the model&#8217;s context.</p><p>This solves an important problem:</p><p><strong>Where can I find information relevant to this question?</strong></p><p>But consider our revenue example.</p><p>A RAG system may successfully retrieve five documents containing the word &#8220;revenue.&#8221; Unfortunately, one document discusses booked revenue, another invoiced revenue, and a third recognized revenue.</p><p>Retrieval has worked perfectly.</p><p>The agent may still produce the wrong answer.</p><p>This is not fundamentally a data-quality problem. The numbers may all be correct.</p><p>It is a semantic problem.</p><p>The SIXT presentation described exactly this kind of ambiguity. Depending on the department and use case, seemingly straightforward business concepts can have different definitions. Determining the correct definition can require considerable organizational knowledge&#8212;or, as the speaker effectively described it, a form of corporate archaeology.</p><p>We have spent years making enterprise information searchable.</p><p>Now we need to make enterprise meaning machine-readable.</p><h2>The forgotten AI infrastructure: the data dictionary</h2><p>Data dictionaries are hardly an exciting new technology.</p><p>Most organizations have had some version of them for decades. They describe tables, fields, data types, business definitions, ownership and sometimes lineage.</p><p>Historically, they have often been treated as documentation: useful for analysts, data engineers and auditors, but not exactly at the center of the technology strategy.</p><p>Generative AI changes that.</p><p>A properly maintained data dictionary can become part of the context that an AI agent uses to interpret enterprise information.</p><p>Imagine an agent encountering a field called <code>booking_revenue</code>.</p><p>Rather than guessing from the column name, it could retrieve additional context:</p><ul><li><p>the business definition of booking revenue;</p></li><li><p>the authoritative source system;</p></li><li><p>the responsible business domain;</p></li><li><p>applicable currencies and conversion rules;</p></li><li><p>related KPIs;</p></li><li><p>known exclusions;</p></li><li><p>the owner responsible for the definition.</p></li></ul><p>Suddenly, the dictionary is no longer passive documentation.</p><p>It becomes runtime context for AI.</p><p>That shift may make investments in data governance that previously felt bureaucratic surprisingly valuable.</p><p>But even a very good data dictionary only gets us so far.</p><h2>A dictionary gives AI a vocabulary. An ontology gives it a worldview.</h2><p>Defining individual terms is useful.</p><p>Understanding how those terms relate to each other is much more powerful.</p><p>This is where ontologies enter the picture.</p><p>An ontology describes the important concepts of a domain and the relationships between them. In a car-rental business, simplified relationships might look something like:</p><p><strong>Customer &#8594; makes &#8594; Booking</strong></p><p><strong>Booking &#8594; fulfilled at &#8594; Branch</strong></p><p><strong>Booking &#8594; generates &#8594; Invoice</strong></p><p><strong>Invoice &#8594; contributes to &#8594; Revenue</strong></p><p>Now the AI has more than definitions. It has a model of how the business fits together.</p><p>The SIXT approach described in the session goes in this direction. Metadata and KPI definitions are combined with an ontology representing major enterprise concepts such as countries, branches and customers, including how data and KPIs relate to those concepts.</p><p>That provides an agent with something much closer to a map.</p><p>It can potentially understand not merely that two documents both contain the term &#8220;branch,&#8221; but what a branch represents in the organization and how it relates to customers, bookings, systems and KPIs.</p><p>This becomes especially important when questions span multiple domains.</p><p>Consider:</p><p><strong>&#8220;Identify branches where revenue declined by more than 10 percent and recommend corrective actions.&#8221;</strong></p><p>Before an agent can answer reliably, it needs to resolve a surprising number of questions.</p><p>Which definition of revenue?</p><p>Compared with which period?</p><p>Which branch&#8212;the booking branch or the return branch?</p><p>Which currency?</p><p>Are cancelled bookings included?</p><p>Which system contains the authoritative value?</p><p>Which operating procedures should be considered before proposing an action?</p><p>A vector search alone cannot reliably provide all of those answers.</p><p>The agent needs context about the enterprise itself.</p><h2>From RAG to an enterprise context layer</h2><p>This was perhaps the most interesting architectural aspect of the SIXT presentation.</p><p>The company is not limiting this contextual information to structured data. There is additional knowledge covering processes and operating procedures, application landscapes and dependencies, as well as engineering standards and non-functional requirements.<br>Together, these components form what SIXT&#8217;s CTO described as an <strong>enterprise context layer</strong> that can be reused by different AI use cases.</p><p>I think this term is useful because it broadens the discussion beyond RAG.</p><p>An enterprise context layer might contain:</p><p><strong>Data context:</strong> schemas, metadata, lineage, ownership.</p><p><strong>Semantic context:</strong> definitions, KPIs, business terminology.</p><p><strong>Ontological context:</strong> relationships between business concepts.</p><p><strong>Process context:</strong> procedures, responsibilities and operating models.</p><p><strong>Technology context:</strong> applications, interfaces and dependencies.</p><p><strong>Governance context:</strong> security policies, coding standards and architectural constraints.</p><p>Instead of every AI project independently rediscovering these things, agents can draw on a common contextual foundation.</p><p>The architecture therefore starts to look less like:</p><p><strong>User &#8594; LLM &#8594; Vector Database &#8594; Documents</strong></p><p>and more like:</p><p><strong>User &#8594; Agent &#8594; Enterprise Context Layer &#8594; Data, knowledge, systems and policies</strong></p><p>That is a significant difference.</p><h2>Agents make semantic ambiguity dangerous</h2><p>For a traditional chatbot, getting the wrong definition of revenue is annoying.</p><p>For an autonomous agent, it can be an operational problem.</p><p>Imagine an AI agent with permission not only to analyze performance but to change pricing, contact customers, modify a booking process or deploy software.</p><p>The better our agents become at taking action, the more dangerous ambiguity becomes.</p><p>This is why agent governance cannot consist solely of permissions, approval workflows and audit logs.</p><p>Agents also need a governed understanding of the environment in which they operate.</p><p>We often ask:</p><p><strong>What is this agent allowed to do?</strong></p><p>We should increasingly also ask:</p><p><strong>What does this agent believe our business concepts mean?</strong></p><p>If every agent maintains its own collection of prompts, documents and interpretations, enterprises risk creating hundreds of slightly different machine-readable versions of themselves.</p><p>That is not scalable governance.</p><h2>The AI bottleneck may not be AI</h2><p>There is an uncomfortable conclusion here.</p><p>Many companies are currently investing heavily in models, vector databases, agent frameworks and orchestration platforms.</p><p>Those technologies matter.</p><p>But the limiting factor for enterprise AI may increasingly be much older problems:</p><p>inconsistent terminology, undocumented processes, unclear ownership, incompatible data models and several competing definitions of the same KPI.</p><p>Generative AI did not create those problems.</p><p>It simply makes them harder to ignore.</p><p>The good news is that work invested in solving them does not benefit only one AI project.</p><p>The SIXT speaker closed with exactly that lesson: investment in these foundations creates compounding results across use cases.</p><p>That may be one of the more important architectural shifts created by agentic AI.</p><p>Companies that prepared their data for dashboards built data platforms.</p><p>Companies that prepare their semantics for machines may be building something even more valuable: the operating context for their AI agents.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/your-rag-system-found-the-right-data?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading etx2! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/p/your-rag-system-found-the-right-data?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.etx2.net/p/your-rag-system-found-the-right-data?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div>]]></content:encoded></item><item><title><![CDATA[Your AI Agent Doesn’t Need More Context. It Needs a Map.]]></title><description><![CDATA[Advanced RAG can help an AI agent find the right information. Graph theory can help it understand where it is, what is possible next, and which paths it must never take.]]></description><link>https://www.etx2.net/p/your-ai-agent-doesnt-need-more-context</link><guid isPermaLink="false">https://www.etx2.net/p/your-ai-agent-doesnt-need-more-context</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Mon, 10 Aug 2026 08:47:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5093d5a7-76e6-4b43-a1fc-80e181ab8f66_557x349.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_!uxdi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uxdi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 424w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 848w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uxdi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png" width="1456" height="1430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1430,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6924594,&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://etx2.substack.com/i/210408815?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.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_!uxdi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 424w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 848w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!uxdi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22628359-1854-4ab2-ba8d-0b639e692ebe_2694x2646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At Ai4 in Las Vegas this week, I attended two sessions that came together in a way I had not expected.</p><p>The first was a four-hour workshop on advanced Retrieval-Augmented Generation. It went far beyond the familiar &#8220;chunk, embed, retrieve, generate&#8221; pattern, covering hybrid retrieval, routing, adaptive chunking, indexing, reranking, guardrails, observability, and evaluation.</p><p>But the session that really caught my attention came later.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! 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>Keith Soura, CTO of Arch, presented a talk with a wonderfully precise title:</p><p><strong>&#8220;RAG is a Flashlight. Your AI Agent Needs a Map. Graph Theory as an AI Agent&#8217;s Superpower.&#8221;</strong></p><p>The premise was simple. RAG may give an AI system access to enormous amounts of information, but having an encyclopedia containing everything about the world does not tell you how to get from New York to Los Angeles. For that, you need a map: an origin, a destination, and a way to navigate the territory between them.</p><p>That points to an important distinction for enterprise AI:</p><p>RAG can provide the knowledge. An autonomous agent also needs a map.</p><h2>Advanced RAG solves a real problem</h2><p>Basic RAG is conceptually simple. Split documents into chunks, create embeddings, retrieve semantically similar information, and give that context to a language model.</p><p>In production, things quickly become more complicated.</p><p>The workshop demonstrated how dense and sparse retrieval can be combined, queries routed to different retrieval strategies, results reranked, and chunking adapted to different types of information. It also covered different indexing strategies and, importantly, systematic evaluation of retrieval quality.</p><p>Did we retrieve the right evidence? Did the model actually use it? Is the answer grounded? What does each stage cost in latency?</p><p>This is where enterprise RAG is heading. The challenge is no longer simply connecting an LLM to a vector database. It is designing a retrieval pipeline whose quality can be measured and continuously improved.</p><p>But better retrieval does not solve every problem.</p><h2>Similarity is not a process model</h2><p>Soura&#8217;s talk focused on regulated financial processes, particularly mortgage origination and alternative investments.</p><p>His starting point was that RAG is good at finding relevant context. But similarity does not tell an agent how a business process works.</p><p>Consider a mortgage.</p><p>Pull a credit report. Verify income. Calculate a debt-to-income ratio. Request documents. Recalculate eligibility. Trigger disclosures. Wait for dependencies. Possibly repeat steps when something changes.</p><p>Activities depend on facts, create new facts, and trigger other activities. There are branches, loops, deadlines, permissions, exceptions, and regulatory constraints.</p><p>The mortgage system described in the session contained around 1,800 registered activities, roughly 26,000 fact references, and about 5,400 activity-to-activity edges.</p><p>You can embed the regulations, operating procedures, and historical cases.</p><p>But an embedding does not inherently tell you that activity A must precede B, that B triggers C, that C is currently blocked because a required fact is missing, or that a certain transition is prohibited.</p><p>That is not primarily a semantic-search problem.</p><p>It is a graph problem.</p><h2>The graph becomes the map</h2><p>In Soura&#8217;s architecture, facts and activities form a living dependency graph.</p><p>Facts might include verified income, a credit score, a document status, or a calculated ratio. Activities consume facts and create new ones. Activities can also trigger other activities.</p><p>Once the domain is represented this way, decades of graph theory become available.</p><p>Graph algorithms can identify nodes that gate large parts of a process, find cycles, detect tightly connected clusters, and remove redundant paths.</p><p>The objective is not to give the agent the entire graph. It is to determine which part matters now.</p><p>In the mortgage example, roughly 5,400 relationships could be reduced to around 1,200 edges for high-speed reasoning.</p><p>Instead of stuffing an entire enterprise process into the context window, the agent gets the relevant section of the map.</p><h2>Why this resonated with me</h2><p>This was probably the part of the presentation I liked most, because the underlying engineering principle was very familiar to me.</p><p>I have successfully used essentially the same graph-oriented approach when implementing complex pricing systems in the reinsurance domain.</p><p>Reinsurance pricing can require a large number of calculations where the result of one calculation becomes the input to several others. Some calculations can only run once particular data is available. A change to an upstream value may invalidate downstream results and require part of the calculation chain to execute again. Multiple calculations may also share intermediate results.</p><p>Representing such a pricing system as a dependency graph makes the complexity much easier to manage.</p><p>Input data and intermediate results become facts or nodes. Calculations become transformations. Edges describe their dependencies.</p><p>Instead of constructing one enormous procedural calculation sequence, the graph describes how information flows through the pricing model.</p><p>Graph theory itself is obviously not new.</p><p>What I found fascinating in Soura&#8217;s presentation was applying the same engineering principle to AI agents.</p><p>The new element is putting a probabilistic reasoning engine on top of deterministic structure.</p><p>The language model can still interpret an unusual situation, understand natural language, explain a result, or decide how best to communicate.</p><p>But the possible routes through the underlying business system are supplied by the graph.</p><p>That is a very different role for the LLM.</p><h2>The encyclopedia and the map</h2><p>Soura&#8217;s analogy provides a useful architectural model.</p><p>RAG gives the agent the encyclopedia.</p><p>It retrieves the underwriting guideline, policy wording, previous case, operating procedure, contract clause, or technical documentation.</p><p>Advanced RAG increases the probability that the correct pages of that encyclopedia are found.</p><p>The graph gives the agent the map.</p><p>It describes how things are connected, where the process currently stands, which dependencies remain unresolved, and what actions can legitimately happen next.</p><p>You need both.</p><p>Without good retrieval, an agent may navigate the correct process using weak evidence.</p><p>Without the map, it may have excellent information and still take the wrong turn.</p><p>This distinction becomes much more important as we move from conversational AI toward autonomous agents.</p><p>A chatbot can generate an incorrect paragraph.</p><p>An agent can execute an incorrect action.</p><p>Once agents can move money, change policies, approve transactions, or trigger workflows, &#8220;probably correct&#8221; is no longer a sufficient operating model.</p><h2>The graph knows about things that are not there</h2><p>One particularly interesting limitation of embeddings is absence.</p><p>You cannot retrieve the embedding of a document that should exist but does not.</p><p>Soura illustrated this using tax documents in alternative investments.</p><p>If a particular tax statement has not arrived, there is nothing for semantic search to find. But a graph can encode the surrounding relationships and determine that the document is expected because equivalent positions have already produced theirs.</p><p>The absence itself becomes information.</p><p>Graphs can also carry provenance. In the investment example, relationships were connected back to source documents. An answer such as exposure to a particular company could therefore be represented as a path through the graph, with the individual steps remaining traceable to their underlying evidence.</p><p>For regulated enterprise applications, that is much more useful than simply returning a confidence score.</p><h2>Deterministic rails for probabilistic reasoning</h2><p>This is why I would not simply call the concept &#8220;Graph RAG.&#8221;</p><p>Embeddings can certainly exist on the graph. Documents can be attached to nodes, and semantic retrieval can provide supporting information.</p><p>But the embedding should not be the steering layer.</p><p>The graph determines what is reachable.</p><p>The LLM reasons within those rails.</p><p>Toward the end of the session, Soura described this as putting a probabilistic reasoning system on top of deterministic rails. Facts remain grounded in identifiable sources, while the actions available to the agent come from defined graph transitions.</p><p>This also suggests a different approach to agent governance.</p><p>Today we often give an agent broad capabilities and then monitor it with guardrails, validation, approval mechanisms, and observability.</p><p>The graph offers another principle:</p><p>Do not only detect the wrong turn. Make sure the wrong road is not available in the first place.</p><p>Of course, this does not make an agent bullet-proof.</p><p>A deterministic map can still be wrong. Missing dependencies, incorrect business rules, bad source data, or outdated regulations can make an agent reliably follow the wrong route.</p><p>The map itself therefore becomes a governance artifact. It needs provenance, versioning, testing, and auditability.</p><p>This shifts the trust question from simply:</p><p>Can we trust the model?</p><p>to:</p><p>Can we trust the map the model is navigating?</p><p>For enterprise technology, I find the second question much more actionable.</p><h2>From better retrieval to safer autonomy</h2><p>My takeaway from the two Ai4 sessions is not that graph theory replaces RAG.</p><p>They solve different problems.</p><p>Advanced RAG improves the quality of evidence available to an agent.</p><p>Graph-based context improves the quality of navigation available to an agent.</p><p>A strong enterprise architecture can combine both: use sophisticated retrieval to find trustworthy evidence, model operational facts and dependencies as a graph, reduce that graph to the relevant state, and then let the LLM reason within that environment.</p><p>The model can interpret language, explain results, and choose among legitimate alternatives.</p><p>But it should not invent the roads.</p><p>Perhaps the next major advance in enterprise AI will therefore not come from ever larger context windows.</p><p>We may already have enough flashlights.</p><p>What our agents increasingly need are trustworthy maps.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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 Enterprise Technology &amp; Excel Exorcism! 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 Governance: The Missing Operating System for Enterprise AI]]></title><description><![CDATA[What AWS and Dataiku said at Ai4 &#8212; and how Microsoft Foundry fits into the picture]]></description><link>https://www.etx2.net/p/agent-governance-the-missing-operating</link><guid isPermaLink="false">https://www.etx2.net/p/agent-governance-the-missing-operating</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Sat, 08 Aug 2026 03:33:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7030d936-b72b-40bc-8a06-ccebc5138ee7_613x347.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_!5jWq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5jWq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 424w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 848w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5jWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png" width="1456" height="1430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1430,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5913967,&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://etx2.substack.com/i/210272923?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.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_!5jWq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 424w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 848w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!5jWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59165502-efb2-4cd7-a8b1-dff57fe2c088_2694x2646.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I spent this week at <strong>Ai4 in Las Vegas</strong>, and one theme came through more clearly than any discussion about model size, benchmarks, or the latest agent framework: enterprises are learning to build AI agents faster than they are learning to control them.</p><p>Two keynotes made the problem especially tangible.</p><p><strong>Dataiku</strong> approached it from the organizational side: AI creation is moving out of central IT and into the business, in much the same way spreadsheets did forty years ago.</p><p><strong>AWS</strong> approached it from the technical side: once agents can make decisions and invoke tools, governance has to operate at runtime, at the moment an action is attempted.</p><p>Taken together, the two talks point toward a governance model that is less about approving AI projects and more about creating an operating system for a new class of digital workers.</p><h2>The Excel lesson we should not repeat</h2><p>Dataiku used a comparison that will be painfully familiar to almost every enterprise IT organization: Excel.</p><p>For decades, business users have built business-critical applications in spreadsheets because they were closest to the problem and because waiting for IT was too expensive. Finance models, underwriting tools, planning systems, and operational processes grew outside the formal application landscape. IT could complain about shadow IT, but the demand was legitimate.</p><p>The keynote argued that the same dynamic is now repeating with generative AI and &#8220;vibe coding,&#8221; only much faster. Dataiku&#8217;s 2026 survey of 900 CEOs found that 96% believe employees are already using generative AI without approval. The important insight is that this should not simply be interpreted as a compliance failure. It is also a demand signal: people are solving problems with the tools available to them because the value of not waiting is becoming too high.</p><p>But agents make the spreadsheet analogy considerably more dangerous.</p><p>A spreadsheet can contain a wrong formula and produce a convincing but incorrect chart. An agent can do that &#8212; and then send the email, update the customer record, execute a transaction, expose data, or trigger another system. Dataiku made exactly this distinction in the keynote: an ungoverned agent does not merely miscalculate; it can act on the mistake.</p><p>The risk moves from bad calculation to bad action.</p><p>The spreadsheet era gave us shadow applications.</p><p>The agent era can give us shadow actors.</p><h2>Agents are labor</h2><p>Governance therefore cannot simply mean that central IT approves every agent.</p><p>Dataiku&#8217;s more provocative argument was that &#8220;agents are labor.&#8221; The business unit that owns the outcome should increasingly decide which agents are worth deploying, carry the budget, and be accountable for their productivity and ROI.</p><p>IT&#8217;s role changes from being the permission system to providing the foundation that makes distributed creation safe.</p><p>I think this is a particularly useful way to look at enterprise agent governance.</p><p>Nobody expects HR to personally approve every task performed by every employee. HR provides identity, onboarding, policies, records, and processes, while line management owns performance.</p><p>Agent governance needs a similar separation of responsibilities.</p><p>A claims department deploying a claims agent should ultimately own whether that agent improves claims handling. A finance organization deploying an accounting agent should own its business outcome. An IT department cannot realistically become the product owner for hundreds or thousands of domain-specific agents.</p><p>But the business should not have to reinvent identity, security, monitoring, auditability, and access control every time it creates one.</p><p>That is the platform IT needs to provide.</p><p>And the pressure to solve this problem is already significant. Dataiku&#8217;s CEO survey found that 83% expect to deploy AI agents in full production during 2026, while only 25% of CIOs say they can monitor all their agents in real time.</p><h2>From ownership to technical control</h2><p>The AWS keynote started from the other end of the problem.</p><p>The question was not whether we can build capable agents. We clearly can.</p><p>The question was whether we can prove that those agents stay within their intended boundaries when nobody is watching.</p><p>This becomes difficult because agent risk is contextual.</p><p>Imagine an email agent. Giving it permission to use a <code>send email</code> tool is easy. But the real governance question is not:</p><p><em>May this agent send email?</em></p><p>It is:</p><p><em>May this agent send this specific information to this recipient, at this moment, under these conditions, without additional approval?</em></p><p>Traditional access-control systems are good at relatively static allow-or-deny decisions. Agent behavior is different.</p><p>A $50 refund and a $50,000 refund may invoke the same tool but should not require the same control. An internal email and an external email may use the same API but carry very different data-loss risks. A routine replenishment order and a six-figure capital purchase are not equivalent actions just because both call the same ordering interface.</p><p>This is where agent governance becomes an architectural discipline rather than a policy document.</p><h2>Put the controls outside the agent</h2><p>AWS&#8217;s answer is a governance layer around the agent, rather than governance embedded only inside its prompt or code.</p><p>The keynote described several foundations that need to work together: identity, policy enforcement, an agent registry, observability, and continuous evaluation.</p><p>Identity matters because an agent should not be an anonymous extension of a developer account or generic service credential. It should have its own identity, defined privileges, and a clear delegation relationship: which user or business process is it acting for, and with what authority?</p><p>Policy must then be enforced deterministically outside the agent&#8217;s reasoning loop.</p><p>This is an important architectural principle.</p><p>If a safety rule exists only in a system prompt, the same probabilistic model that decides what to do is effectively being asked to police itself.</p><p>AWS AgentCore Policy instead evaluates tool calls at the gateway boundary. Policies are expressed in Cedar, AWS&#8217;s open-source authorization language, and can restrict actions according to identity, tool parameters, and other context before the action reaches the target system.</p><p>Then comes observability.</p><p>For serious enterprise use, logs cannot stop at HTTP status codes. We need traces across model calls, tool invocations, routing decisions, and policy evaluations so that an agent action can later be reconstructed and audited.</p><p>And evaluation cannot be a one-time pre-production exercise. Agent behavior can change when models, prompts, tools, data, memory, or context change. Governance therefore requires continuous regression testing and production evaluation.</p><h2>From testing behavior to proving boundaries</h2><p>Perhaps the most interesting part of the AWS keynote went one step further.</p><p>Testing demonstrates what happened in the cases we tested. But with agents, the number of possible sequences grows rapidly once multiple agents, tools, roles, data classifications, and communication channels interact.</p><p>AWS argued for combining the flexibility of LLMs with automated reasoning to verify properties of the policies governing them.</p><p>That represents an important shift in thinking.</p><p>Instead of saying:</p><blockquote><p>&#8220;We tested the agent and it appeared to behave safely.&#8221;</p></blockquote><p>we increasingly want to say:</p><blockquote><p>&#8220;This architectural control prevents this class of action regardless of what the model decides.&#8221;</p></blockquote><p>The latter is a much stronger basis for enterprise autonomy.</p><h2>The missing enterprise control plane</h2><p>Dataiku supplied an interesting story about why all of this matters at scale.</p><p>A CIO believed the company had around 40 agents in production. After investigating across the different platforms being used by the business, the number apparently turned out to be more than 400.</p><p>The organization lacked a reliable view of who owned them, what they cost, where they ran, and how well they were performing.</p><p>That story may become the defining governance problem of the next few years.</p><p>Most large enterprises will not have one agent platform.</p><p>They will have agents embedded in SaaS products, cloud platforms, low-code environments, business applications, and custom frameworks. Some will be built centrally. Many will not.</p><p>The governance architecture therefore has to assume heterogeneity from the start.</p><p>This is where Dataiku&#8217;s Agent Management concept and AWS&#8217;s governance foundation meet: enterprises need something resembling an agent control plane that can discover or register agents, bind them to accountable owners, observe their behavior, enforce policy, and measure both technical and business performance.</p><p>Having a long history in the Microsoft technology space, I was also interested what Microsoft has to offer. And Microsoft is heading in much the same direction.</p><h2>Microsoft Foundry: a similar approach</h2><p>Microsoft was not at Ai4, but the current Microsoft Foundry architecture is worth adding to the comparison because it reinforces the same design pattern.</p><p>Microsoft Foundry Control Plane provides centralized inventory and management for agents, models, and tools across Foundry projects. Its agent inventory can expose information such as status, versions, error rates, token usage, estimated cost, and agent identity.</p><p>Interestingly, Microsoft is also extending the concept beyond agents built natively in Foundry. External agents can be registered and instrumented with OpenTelemetry so that Foundry can provide tracing and evaluation while the actual agent continues running elsewhere.</p><p>On identity, Microsoft Entra Agent ID treats agents as first-class identities rather than merely generic application credentials. Published Foundry agents receive a dedicated agent identity, enabling agent-specific permissions and audit trails.</p><p>That maps closely to the AWS principle that governance starts by knowing exactly which agent is acting and under whose authority.</p><p>On runtime control, Microsoft introduced the Agent Control Specification (ACS), an open specification for deterministic controls at five checkpoints: input, LLM, state, tool execution, and output. Microsoft is also bringing Purview data-protection capabilities, including runtime DLP, into the Foundry environment.</p><p>Again, the architectural direction is remarkably similar:</p><p>Important controls cannot live only in prompts.</p><p>They need enforceable checkpoints around the agent.</p><p>On operations, Foundry provides tracing and evaluations across model calls, tool invocations, and agent hops, with Azure Monitor and Application Insights supporting production monitoring. Microsoft has also been extending trace-based evaluation beyond Foundry-native agents.</p><p>That cross-platform capability will matter increasingly because governance becomes much less useful if it only works for agents built with one vendor&#8217;s SDK.</p><h2>Governance should accelerate agents, not stop them</h2><p>My main takeaway from Ai4 is that agent governance should not be designed as another approval bureaucracy.</p><p>If every meaningful action requires human approval, we have technically governed the agent by removing much of the reason for having an agent.</p><p>At the opposite extreme, giving autonomous systems broad credentials and hoping that the system prompt keeps them well behaved is not governance either.</p><p>The target is governed autonomy.</p><p>That means business ownership for outcomes and budget, an enterprise inventory of agents, first-class agent identities, least-privilege access, deterministic runtime policies, action-level observability, continuous evaluation, and explicit lifecycle controls to stop, quarantine, or retire agents that fail.</p><p>The organizational and technical models have to meet.</p><p>Business units should be able to &#8220;hire&#8221; agents because they understand the work. IT and security should build the platform that makes those hires visible, bounded, and auditable. Governance teams should define policies that can be enforced automatically rather than reviewing every action manually.</p><p>In the spreadsheet era, enterprises tolerated thousands of critical applications they could barely see or govern because the alternative was stopping the business.</p><p>AI agents give us a chance to avoid repeating that history &#8212; but only if we build the foundation early.</p><p>And there is an interesting paradox here.</p><p><strong>Stronger governance may be what finally allows agents to become more autonomous.</strong></p><p>When you can identify them, constrain them, observe them, and prove which boundaries they cannot cross, you need fewer manual checkpoints. Governance is not the brake on agentic AI. </p>]]></content:encoded></item><item><title><![CDATA[Excel still rules many Enterprises]]></title><description><![CDATA[According to studies, 70% of CFOs still depend on Excel for planning, forecasting and reporting]]></description><link>https://www.etx2.net/p/excel-still-rules-many-enterprises</link><guid isPermaLink="false">https://www.etx2.net/p/excel-still-rules-many-enterprises</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Fri, 15 May 2026 13:57:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Hf2j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With more than 40 years of age and a global user base of more than a billion users, Excel has become a real success story for Microsoft.</p><p>Continue reading below the TLDR comic strip. </p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hf2j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hf2j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hf2j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg" width="924" height="3080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3080,&quot;width&quot;:924,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:563288,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://etx2.substack.com/i/197812341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hf2j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hf2j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da4deee-04a4-422a-bcda-22ae90d39a42_924x3080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><p>Business users love Excel for its simplicity, flexibility and ability to automate calculations and handling with data. It has become an ever-recurring pattern: A business analyst needs a simple spreadsheet. The results and speed of implementation are convincing to management. Not long after, the spreadsheet has macros, pivot tables and references to other Spreadsheets and is deeply embedded in business processes.</p><h1>Excel solutions and their challenges</h1><p>In no time, the simple spreadsheet has become a piece of the company&#8217;s critical business infrastructure with business logic and data transformation rules. It&#8217;s a business application but very often without proper testing, documentation and version control.</p><p>Often, the solution is tied immediately to its creator &#8211; and becomes a risk when the creator retires or leaves the business.</p><p>Auditors are watching these types of critical business applications very carefully nowadays. The risks associated with them cannot be ignored anymore. The JPMorgan Chase &#8220;London Whale&#8221; issue with more than $6 billion losses issue is long ago, but the root causes are not really solved.</p><h2>Spreadsheet Variations</h2><p>Not every spreadsheet is the same. This sounds trivial, but it is one of the reasons why Excel governance is so difficult in practice. A simple worksheet used for a one-time calculation has a completely different risk profile than a workbook that calculates quarterly reserves, prepares regulatory reporting, or drives operational decisions.</p><p>In most enterprises, spreadsheets exist in many variations. Some are simple lists. Some are calculators. Some are reporting layers on top of exported data. Some are planning models with dozens of assumptions, scenarios, and manual adjustments. Others are closer to full business applications: they contain structured input forms, pivot tables, formulas, hidden sheets, Power Query transformations, macros, external links, database connections, and sometimes even custom add-ins.</p><p>This spectrum matters. A workbook that only stores temporary notes may not require formal governance. A workbook that produces numbers used in financial reporting, pricing, forecasting, risk management, or customer communication clearly does. The problem is that the transition between these categories is usually gradual. Nobody starts with the intention to build an uncontrolled business-critical application. It simply happens.</p><p>The typical lifecycle is familiar: first, the spreadsheet solves a local business problem. Then more users start relying on it. Then formulas are extended. Then data is imported from another system. Then macros automate repetitive steps. Then management asks for additional reports. Users save files with modifications in different locations. At some point, the spreadsheet is no longer just a file. It has become an application &#8212; but without the lifecycle management normally expected from an application.</p><p>This is why the first governance question should not be: &#8220;Do we allow Excel?&#8221; That question is too broad. The better question is: &#8220;What type of spreadsheet are we looking at?&#8221; A lightweight classification model can help:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jU4z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jU4z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 424w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 848w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 1272w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jU4z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png" width="718" height="379" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:379,&quot;width&quot;:718,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27691,&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://etx2.substack.com/i/197812341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.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_!jU4z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 424w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 848w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 1272w, https://substackcdn.com/image/fetch/$s_!jU4z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9887fa7-1fd7-4130-bd50-e892fdf57781_718x379.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This classification is important because spreadsheet risk does not come from Excel itself. It comes from the mismatch between the business relevance of the workbook and the controls applied to it.</p><h2>Embedded Data</h2><p>A spreadsheet is rarely just a calculation surface. It is also a data container. And this is where many enterprise risks begin.</p><p>Business users often copy data into Excel because it is convenient. They export data from ERP systems, CRM systems, data warehouses, reporting tools, email attachments, SharePoint lists, and operational platforms. The exported data is then adjusted, enriched, filtered, corrected, and combined with other data. From a business perspective, this is practical. From a data governance perspective, it creates a parallel data universe.</p><p>Once data is embedded in a workbook, several questions become difficult to answer. Where did the data originally come from? When was it extracted? Has it been modified manually? Which version is the correct one? Are there hidden rows, filters, overwritten formulas, outdated lookups, or hard-coded assumptions? Is personal or confidential data stored in a file that is forwarded by email or saved locally?</p><p>The risk is not only that data may be wrong. The bigger issue is that the data lineage becomes invisible. A number in a spreadsheet may look precise, but its origin may be unclear. A workbook can mix current system data, historical extracts, manual overrides, assumptions, and copied values in the same calculation chain. Without explicit documentation, even the workbook owner may struggle to explain the exact path from source data to final result.</p><p>Embedded data also creates reconciliation problems. If a spreadsheet contains a local copy of data from a core system, the spreadsheet starts aging immediately after the export. Reports based on this copy may diverge from the official source. Different teams may use different extracts, different assumptions, and different manual adjustments. The organization then spends time explaining differences instead of managing the business.</p><p>Modern Excel technologies can reduce some of this risk, but they do not remove it automatically. Power Query, Office Scripts, Python in Excel, xlwings, VBA, and Office.js all allow richer interaction with data, but they also introduce new dependency chains. Python in Excel, for example, is powerful for analysis and machine learning, but the report notes that it runs in secure Azure cloud containers and is not designed as a replacement for process automation or system integration. Office.js provides cross-platform add-in capabilities, but the report also highlights platform fragmentation and production stability concerns.</p><p>The governance principle should therefore be simple: business-critical spreadsheets need explicit data lineage. For each critical workbook, it should be clear which data sources are used, how data is imported, which fields are transformed, where manual input is allowed, and which outputs are used in downstream processes.</p><h2>Algorithms</h2><p>Many spreadsheets contain algorithms, even if nobody calls them that.</p><p>A pricing formula is an algorithm. A reserve calculation is an algorithm. A risk score, allocation key, planning assumption, reconciliation rule, or eligibility check is an algorithm. In traditional software development, this logic would be implemented in application code, reviewed, tested, versioned, and documented. In Excel, the same logic may be distributed across thousands of cells, named ranges, lookup tables, hidden worksheets, Power Query steps, VBA modules, Office Scripts, Python cells, and add-ins.</p><p>This makes Excel powerful. It also makes it dangerous.</p><p>Spreadsheet algorithms are often highly transparent at the beginning. A business expert can see the formula, adjust it, and immediately inspect the result. This is one of Excel&#8217;s greatest strengths. But transparency declines as complexity grows. Nested formulas become difficult to read. Copy-and-paste logic creates inconsistent formula ranges. Hidden sheets hide assumptions. Macros turn visible logic into procedural code. External links create dependencies that users may not understand. Add-ins can move important logic outside the workbook completely.</p><p>The technology landscape reinforces this point. VBA is still deeply entrenched, but according to studies is declining, security-sensitive, and often poorly maintained, with high rates of unmaintained and undocumented production code. VSTO is effectively deprecated for new development, with migration to Office.js requiring a rewrite rather than a simple conversion. Python in Excel and xlwings open attractive options for analytical and statistical models, but they also shift algorithmic logic into Python code that needs its own testing, packaging, dependency management, and review.</p><p>For business-critical spreadsheets, formulas and macros should therefore be treated as production logic. The relevant question is not whether the logic lives in a &#8220;real application&#8221; or in Excel. The relevant question is whether the output influences real decisions.</p><p>A mature organization should know which spreadsheets contain material business logic. It should define owners for that logic. It should test important calculations with known input and expected output. It should document key assumptions. It should apply peer review to material changes. And it should avoid the worst possible pattern: business-critical algorithms understood by only one person, stored in one workbook, on one network drive.</p><h2>Solution Development Governance</h2><p>The uncomfortable truth is that many Excel solutions are developed like prototypes but used like production systems.</p><p>This is not a criticism of business users. In many cases, Excel solutions exist because central IT was too slow, too expensive, or too far away from the business problem. Excel gives business experts the ability to solve real problems quickly. That capability should not be removed. But once an Excel solution becomes important, its development model needs to change.</p><p>Solution development governance for Excel should not mean forcing every workbook into a heavyweight software delivery process. That would be unrealistic and would destroy the agility that makes Excel valuable. Instead, governance should be risk-based. Low-impact spreadsheets can remain lightweight. Critical spreadsheets need controls that are closer to application lifecycle management.</p><h1>Excel Customization Technologies</h1><p>Excel is not just a spreadsheet. Over decades, it has become a development platform. Business users can start with formulas and pivot tables, but very quickly Excel solutions can grow into something much richer: automated workflows, custom user interfaces, external data connections, add-ins, scripting logic, and even machine-learning-enabled analytical models.</p><p>This is one of the reasons why Excel remains so powerful in enterprises. It gives business experts a way to build solutions without waiting for a full software development project. But it is also one of the reasons why Excel creates governance challenges. The more customization technologies are used, the more the workbook behaves like an application &#8212; and the more it needs architecture, testing, security review, versioning, and lifecycle management.</p><p>The main Excel customization technologies each come from a different era and solve a different type of problem.</p><h2>VBA: the enterprise survivor</h2><p>VBA is the classic Excel automation technology. It allows users and developers to automate workbook actions, create user forms, manipulate cells, connect to files and databases, and implement procedural business logic directly inside Excel.</p><p>For many enterprises, VBA is still everywhere. It is embedded in pricing tools, reporting packs, reconciliations, planning models, actuarial models, financial close processes, and countless departmental applications. The reason is simple: VBA works, it is available inside Excel, and it allowed business users to solve problems long before modern low-code platforms existed.</p><p>But VBA is also a major source of technical debt. The attached report describes VBA as declining but still deeply entrenched. It notes low current developer adoption, widespread unmaintained production code, security concerns, and lack of documentation in many legacy VBA estates.</p><p>The problem with VBA is not that it is technically useless. The problem is that many VBA solutions were never treated as software. They often have no source control, no test suite, no deployment process, no ownership model, and no formal handover. A macro that started as a convenience can quietly become a critical calculation engine.</p><p>For existing VBA solutions, the right strategy is usually not immediate replacement. Large-scale rewrites are risky and expensive. Instead, enterprises should classify VBA workbooks by business criticality. Low-risk macros can remain as-is. Critical VBA applications should be documented, tested, secured, and gradually modernized where there is a strong business case.</p><h2>VSTO: powerful, but strategically outdated</h2><p>Visual Studio Tools for Office, or VSTO, was Microsoft&#8217;s enterprise-grade way to build Office add-ins using .NET. Compared with VBA, VSTO gave professional developers better tooling, stronger integration with Visual Studio, access to the .NET ecosystem, and richer user interface options.</p><p>For Windows-based enterprise environments, VSTO was once a strong choice. It allowed developers to build sophisticated Excel add-ins, connect to enterprise systems, create custom ribbons and task panes, and integrate Excel into broader application landscapes.</p><p>But VSTO has a strategic problem: it belongs to the Windows desktop era. It does not fit well with today&#8217;s cross-platform Office world, where Excel runs on Windows, Mac, browser, and mobile. The attached report describes VSTO as effectively deprecated for new development and highlights that migration from VSTO to Office.js is not a conversion, but a rewrite.</p><p>This matters for enterprises because VSTO solutions may still be business-critical. They may work perfectly today, but they are not a future-proof investment. Organizations should therefore avoid new VSTO development and create a transition plan for important existing add-ins.</p><p>The key governance question is: which VSTO add-ins are still needed, and for how long? Some may be retired. Some may be replaced by web applications, Power Platform solutions, Office.js add-ins, or more standard Excel functionality. Others may have to remain in controlled legacy mode until the surrounding business process is redesigned.</p><h2>Office.js: Microsoft&#8217;s cross-platform future, with operational risk</h2><p>Office.js is Microsoft&#8217;s modern framework for building Office add-ins with JavaScript or TypeScript. Its main promise is cross-platform compatibility. A well-designed Office.js add-in can run across Excel on Windows, Mac, the Web, and potentially other Office environments.</p><p>This makes Office.js strategically important. It fits the modern Microsoft 365 architecture better than VBA or VSTO. It supports central deployment, web-based development patterns, task panes, dialogs, ribbons, and integration with external services. For enterprise software vendors and internal platform teams, Office.js is the official direction for modern Office extensibility.</p><p>However, the technology also introduces a different type of complexity. Instead of local desktop automation, developers deal with browser runtimes, manifests, web security models, API requirement sets, platform differences, deployment channels, and Microsoft 365 update behavior. The attached report highlights serious developer concerns around Office.js, including platform fragmentation, instability, silent breaking changes, and a very large theoretical test matrix across apps, platforms, browsers, update channels, and manifest types.</p><p>That does not mean Office.js should be avoided. It means it should be treated as a serious software platform, not as a quick macro replacement. Office.js is attractive when cross-platform reach, centralized deployment, and modern web integration are important. It is less attractive when the solution depends on deep local file system access, tight desktop integration, or highly stable low-level Excel automation.</p><p>For critical enterprise use cases, Office.js requires professional engineering practices: automated testing, telemetry, staged rollout, fallback processes, security review, and clear ownership. It may be the future of Excel extensibility, but it is not a free lunch.</p><h2>Python in Excel: analytics, not automation</h2><p>Python in Excel introduces a new category of customization. It brings Python-based data analysis directly into the Excel experience. This is highly relevant because many analytical workflows already combine Excel with Python, R, notebooks, or statistical tools.</p><p>The strength of Python in Excel is analytical depth. It allows users to work with Python libraries such as pandas, NumPy, scikit-learn, and visualization libraries inside an Excel-oriented workflow. For analysts, actuaries, controllers, data scientists, and technically skilled business users, this can be a major productivity improvement.</p><p>But Python in Excel should not be misunderstood as the new VBA. The attached report notes that Python in Excel runs in secure Azure cloud containers and is focused on data analysis, visualization, and machine learning &#8212; not on controlling workbook properties, accessing the local file system, or automating external systems.</p><p>This makes Python in Excel an excellent fit for analytical models, exploratory analysis, statistical calculations, and advanced visualization. It is not the right tool for replacing all macro automation or for building complex operational workflows.</p><p>From a governance perspective, Python in Excel also raises new questions. Which Python packages are used? Is the workbook dependent on cloud execution? Are results reproducible? How are analytical assumptions documented? Who validates the code? As with formulas and VBA, Python code inside Excel can become business-critical logic and should be governed accordingly.</p><h2>xlwings and external Python automation</h2><p>xlwings represents another approach: keep Excel as the familiar front end, but move automation and calculation logic into Python. This can be especially attractive for organizations that want to modernize complex VBA solutions without forcing users to abandon Excel immediately.</p><p>xlwings is a Python-Excel bridge with documented enterprise use cases in areas such as machine-learning UDFs, spreadsheet monitoring, education, banking, and actuarial process optimization.</p><p>The main advantage is architectural. Instead of burying all logic in workbook formulas and VBA modules, more complex logic can be implemented in Python, tested with standard software engineering tools, packaged, versioned, and integrated with broader data science ecosystems. Excel remains the user interface, while Python becomes the calculation and automation layer.</p><p>The trade-off is operational complexity. Python environments need to be managed. Dependencies need to be packaged. Deployment to end-user machines must be controlled. Security teams need to understand what code is running and where. This is not necessarily a problem, but it moves the solution from &#8220;spreadsheet customization&#8221; toward &#8220;managed application architecture.&#8221;</p><h1>Modern Excel Solutions</h1><h2>Separate Data and Algorithms from Excel</h2><p><strong>Separate Data and Algorithms from Excel</strong></p><p>One of the most effective ways to reduce Excel risk is not to remove Excel from the business process. It is to remove the most critical data and algorithms from the workbook.</p><p>This is an important distinction. In many enterprises, Excel is valuable because it is familiar, flexible, and close to the business user. People know how to filter, sort, compare, simulate, and adjust data in Excel. They can build scenarios, inspect intermediate results, and challenge assumptions. That flexibility is hard to replace with a rigid application screen.</p><p>But the same flexibility becomes dangerous when the workbook also becomes the system of record, the calculation engine, and the process control layer. Critical data should not live only in spreadsheet files. Critical algorithms should not be maintained only in hidden sheets, copied formulas, or undocumented macros. Excel can remain the interface, but the authoritative data and business logic should move to governed platforms.</p><p>A better architecture is to treat Excel as a frontend.</p><p>In this model, data is stored centrally in databases, data warehouses, lakehouses, or application systems. Excel connects to this data through governed interfaces: database queries, semantic models, APIs, Power Query, OData feeds, or add-ins. Business users can still work with the data in Excel, but the source remains controlled. Access rights, data quality rules, refresh logic, lineage, and auditability are handled centrally rather than separately in hundreds of workbooks.</p><p>The same principle applies to algorithms. Instead of embedding critical calculation logic directly in spreadsheet formulas or VBA modules, the logic can be implemented in a controlled backend service, database procedure, analytical model, Python service, actuarial engine, pricing service, or business rules API. Excel then calls the algorithm, displays the result, and allows users to inspect or simulate inputs.</p><p>This separation changes the role of Excel. It is no longer the place where everything is stored and maintained. It becomes the business workbench.</p><p>That has several advantages.</p><p>First, data consistency improves. Users no longer work on outdated extracts that were copied into a workbook weeks ago. They access centrally managed data with defined refresh rules and controlled permissions.</p><p>Second, algorithm maintenance becomes easier. When a pricing rule, risk formula, allocation method, or validation rule changes, it can be changed once in the central service instead of being manually updated in every workbook where the formula was copied.</p><p>Third, governance becomes more realistic. Databases, APIs, and analytical services can be versioned, tested, monitored, secured, and documented using standard IT practices. This is much harder when logic is scattered across worksheets, macros, and local files.</p><p>Fourth, business agility is preserved. Users do not lose Excel. They still get the environment they know. They can analyze data, build scenarios, create pivot tables, adjust assumptions, and prepare decision material. But the critical components are no longer hidden inside uncontrolled files.</p><p>A simplified target pattern looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ljAl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ljAl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 424w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 848w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 1272w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ljAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png" width="734" height="290" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:290,&quot;width&quot;:734,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14980,&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://etx2.substack.com/i/197812341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.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_!ljAl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 424w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 848w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 1272w, https://substackcdn.com/image/fetch/$s_!ljAl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff82e4d9e-1013-4d1b-9aa8-05fd6d64657a_734x290.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This pattern is especially useful for business-critical spreadsheets that have grown into operational tools. Examples include pricing workbooks, planning models, actuarial calculations, reconciliation tools, risk models, commission calculations, and regulatory reporting support files.</p><p>The goal is not to make every spreadsheet dependent on a complex backend architecture. That would be over-engineering. A small personal productivity workbook does not need an API. But once a spreadsheet contains critical data, recurring business logic, or outputs used for management decisions, the separation of frontend, data, and algorithms should be considered.</p><p>Modern Excel technologies support this direction in different ways. Power Query can connect Excel to governed data sources. Office.js add-ins can provide controlled interfaces to external services. Python-based approaches can move analytical logic into more maintainable code. VBA and legacy add-ins can also call databases and APIs, although they need stronger controls because of their security and maintenance risks. The important architectural principle is independent of the specific technology: Excel should consume governed data and services, not become the only place where they exist.</p><p>This also creates a better migration path. Instead of replacing an entire spreadsheet application in one risky step, organizations can gradually extract the most critical parts. First, move source data into a database. Then replace copied data with controlled queries. Then move complex formulas into a shared calculation service. Then reduce macros to orchestration logic or remove them completely. Over time, the workbook becomes thinner, safer, and easier to replace if needed.</p><p>This is often the most pragmatic modernization strategy. Business users keep the tool they trust, while IT gains control over the parts that matter most: data, algorithms, access, quality, and change management.</p><p>Excel remains powerful as a frontend. It should not always be the backend.</p><h2>Choosing the right technology</h2><p>There is no single best Excel customization technology. The right choice depends on the type of solution, the expected lifetime, the user base, the required integration depth, and the organization&#8217;s ability to support the technology.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1qLb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1qLb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 424w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 848w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 1272w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1qLb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png" width="744" height="619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:619,&quot;width&quot;:744,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30790,&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://etx2.substack.com/i/197812341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.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_!1qLb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 424w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 848w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 1272w, https://substackcdn.com/image/fetch/$s_!1qLb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5534d89a-60b0-4b1b-9ab4-95a74280547c_744x619.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The broader lesson is that Excel customization is not just a technical topic. It is an application strategy topic. VBA, VSTO, Office.js, Python in Excel, and xlwings all allow organizations to extend Excel beyond the spreadsheet. But the moment Excel is extended, the organization must ask the same questions it would ask for any business application: Who owns it? Who tests it? Who secures it? Who maintains it? And what happens when it breaks?</p><p>Excel will continue to rule many enterprises not because it is perfect, but because it is close to the business problem. The challenge is not to stop business users from building solutions. The challenge is to recognize when those solutions have become important enough to deserve professional engineering and governance.</p><h2>Important Governance Controls</h2><p>At minimum, critical Excel solutions should have:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KYr-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KYr-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 424w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 848w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 1272w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KYr-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png" width="510" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c71ea51d-25be-4814-929b-e27920ba6683_510x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:510,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17025,&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://etx2.substack.com/i/197812341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.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_!KYr-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 424w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 848w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 1272w, https://substackcdn.com/image/fetch/$s_!KYr-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ea51d-25be-4814-929b-e27920ba6683_510x348.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This type of governance is especially important because Excel extensibility is in transition. The report describes VBA as legacy but still widely present, VSTO as effectively deprecated for new development, Python in Excel as powerful but narrow, xlwings as useful for Python-based automation, and Office.js as the cross-platform direction but with real operational concerns. That means enterprises should not only govern existing workbooks. They also need technology decision rules for future Excel-based solutions.</p><p>A useful policy could be:</p><p>&#183; For simple analysis, use standard Excel functionality.</p><p>&#183; For repeatable data preparation, prefer Power Query or governed data pipelines.</p><p>&#183; For business-critical automation, avoid unmanaged VBA where possible.</p><p>&#183; For statistical or machine-learning analysis, consider Python in Excel or Python-based architectures.</p><p>&#183; For enterprise-grade cross-platform add-ins, evaluate Office.js carefully, including testing effort, deployment model, supportability, and platform limitations.</p><p>The strategic goal is not to eliminate Excel. That would be unrealistic. The goal is to prevent uncontrolled Excel solutions from becoming invisible enterprise applications. Excel will remain part of the enterprise landscape because it is flexible, familiar, and incredibly productive. But when Excel is used as an application platform, it needs the same management attention as any other application platform.</p><p>A spreadsheet may start as a file. In many enterprises, it ends up as a system. Governance needs to start before that transition becomes invisible.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Welcome to etx2!]]></title><description><![CDATA[Get hands-on enterprise technology analysis from an experienced consultant.]]></description><link>https://www.etx2.net/p/welcome-to-enterprise-technology</link><guid isPermaLink="false">https://www.etx2.net/p/welcome-to-enterprise-technology</guid><dc:creator><![CDATA[Konrad Pfeffer]]></dc:creator><pubDate>Tue, 12 May 2026 10:22:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/291c5533-7c4e-4573-8a81-225362f54056_1355x650.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am going to write about AI, software and data engineering in the enterprise context. Sometimes augmented with ironic comic strips. </p><p>Download my exclusive review on empirical effects of AI-assisted software engineering on signup for free. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.etx2.net/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">Subscribe to download the PDF. Link in the confirmation mail. </p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>