<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jonathan Fulton on Medium]]></title>
        <description><![CDATA[Stories by Jonathan Fulton on Medium]]></description>
        <link>https://medium.com/@jonathan_fulton?source=rss-d05e0fdb8e4f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*N3Bdis7K2nKnLw2dytSX1g.png</url>
            <title>Stories by Jonathan Fulton on Medium</title>
            <link>https://medium.com/@jonathan_fulton?source=rss-d05e0fdb8e4f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 09 May 2026 18:34:33 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jonathan_fulton/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Codex vs Claude Code: Why I Decided to Switch to Codex]]></title>
            <link>https://medium.com/jonathans-musings/codex-vs-claude-code-why-i-decided-to-switch-to-codex-97f905c0ad4e?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/97f905c0ad4e</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Sat, 09 May 2026 15:14:21 GMT</pubDate>
            <atom:updated>2026-05-09T15:14:21.414Z</atom:updated>
            <content:encoded><![CDATA[<h4><em>After nearly a year with Claude Code as my daily driver, I’ve made the jump to OpenAI’s Codex. Here’s how it happened and what I’ve learned.</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-7Tow-4yMNz-a0q45ht7Cg.png" /></figure><h3>How I Got Here</h3><p>I started using Claude Code last summer after testing it in a <a href="https://medium.com/jonathans-musings/cursor-vs-claude-code-and-vibe-coding-e13788042a17">vibe coding contest against Cursor</a>. Claude Code won that contest, and it became my go-to coding agent. I used it for everything — writing features, debugging, refactoring, generating tests. It was good.</p><p>But over the past few months, Codex kept appearing in my periphery. And eventually, it pulled me in.</p><h3>First Encounter: PR Reviews That Actually Find Bugs</h3><p>My first real exposure to Codex came through Datadog’s automated code review process. Codex provides comments on PRs, and unlike a lot of automated review tools, these comments are actually useful. It finds real bugs — the kind that would otherwise slip through human review.</p><p>I was impressed. But not enough to switch my local workflow.</p><h3>Second Encounter: The Clawdbot Story</h3><p>My next encounter was more indirect. The creator of Clawdbot (now OpenClaw), Peter Steinberger, mentioned that he used Codex to build the open source project that was eventually acquired by OpenAI.</p><p>That got me thinking. If someone was building production-quality, acquisition-worthy software with Codex, maybe I should pay more attention.</p><p>But still not enough to actually install it.</p><h3>What Finally Got Me: Code Reviews from Inside Claude Code</h3><p>The thing that finally pushed me over the edge was the Codex review plugin for Claude Code. It let me run advanced code reviews against my local changes without pushing up a PR.</p><p>This was the killer feature for my workflow. I could make a bunch of changes, run a Codex review locally, catch issues early, and iterate — all before my code ever hit a remote branch.</p><p>So I installed Codex. But for the first few weeks, I mostly just used it for those code reviews, still doing my actual coding work in Claude Code.</p><h3>The GPT-5.5 Factor</h3><p>Two things happened around the same time.</p><p>First, a coworker mentioned that they’d been using Codex and that GPT-5.5 was surprisingly good.</p><p>Second, another coworker — a longtime Cursor user — was blown away when GPT-5.5 one-shotted a complicated task that would have taken quite a few iterations with Opus 4.7. One-shot. Done. No back-and-forth.</p><p>That was enough to get me to actually try Codex for real coding work.</p><h3>The Head-to-Head Test</h3><p>For a couple of weeks, I ran as many parallel queries as I could in both Codex and Claude Code. Same tasks, same context, see what happens.</p><p>It’s a little hard to articulate exactly why I ended up preferring Codex, but a few things stood out:</p><h3>1. Better at Using Skills</h3><p>Codex seemed slightly better at knowing when and how to use skills (the equivalent of tools or MCP servers). It would reach for the right skill at the right time without as much prompting.</p><h3>2. Navigates Complexity Better</h3><p>This one was the big differentiator. I had Codex trace requests and tasks through <em>three different codebases</em>, and it excelled. It understood the boundaries between services, followed the data flow across repos, and synthesized a coherent picture.</p><p>Claude Code can do this too, but Codex handled the complexity with less hand-holding.</p><h3>3. Computer Usage</h3><p>This one can be huge depending on your workflow. Codex can control your computer — clicking through UIs, running commands, interacting with web apps.</p><p>Here’s a concrete example: I was debugging why certain requests in our experiment metric creation flow were timing out. I had Codex:</p><ol><li>Visit the metric creation flow in the browser</li><li>Submit a SQL query to reproduce the issue</li><li>Use skills to find the request in Datadog traces</li><li>Open the Datadog UI and navigate to the specific trace</li><li>Navigate our frontend monorepo</li><li>Navigate our backend monorepo</li><li>Trace through multiple services within the backend</li><li>Correctly identify the root cause of the timeout</li></ol><p>That’s a workflow that would normally involve me jumping between browser tabs, terminal windows, and multiple codebases. Codex did it end-to-end.</p><h3>4. Handles Intricate Work at Scale</h3><p>Eppo by Datadog has a complicated API that supports syncing hundreds of SQL sources and metrics. It’s not simple — there are edge cases, validation rules, and intricate dependencies.</p><p>I asked Codex to write an RFC for rebuilding this API better in the Datadog platform. It essentially one-shotted a 1,000-line RFC. Then I asked it to create a detailed implementation plan from that RFC. Another 1,000 lines, one-shot.</p><p>Claude Code can do similar work, but in my experience it doesn’t perform as well on tasks this complicated and intricate. The output requires more iteration to get right.</p><h3>Will I Stick With Codex?</h3><p>Honestly? Who knows.</p><p>The AI coding landscape changes fast. Claude’s next release might leapfrog GPT-5.5. Cursor might ship something that makes both feel dated. Some new tool might emerge that rewrites the rules entirely.</p><p>But for now, Codex is my daily driver.</p><p>The combination of strong model performance, computer usage capabilities, and the ability to handle genuinely complex multi-codebase work has won me over. I’m still using Claude Code for some things — and I still think it’s excellent — but when I sit down to do serious coding work, I reach for Codex first.</p><p>Sometimes the best tool is just the one that makes hard things feel a little easier. Right now, for me, that’s Codex.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=97f905c0ad4e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/codex-vs-claude-code-why-i-decided-to-switch-to-codex-97f905c0ad4e">Codex vs Claude Code: Why I Decided to Switch to Codex</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What is RAG and How Does It Work with Modern AI Systems?]]></title>
            <link>https://medium.com/jonathans-musings/what-is-rag-and-how-does-it-work-with-modern-ai-systems-9f4488721c41?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/9f4488721c41</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Wed, 06 May 2026 23:06:02 GMT</pubDate>
            <atom:updated>2026-05-06T23:06:02.603Z</atom:updated>
            <content:encoded><![CDATA[<h4><em>A practical guide to Retrieval-Augmented Generation — the architecture pattern powering enterprise AI, coding agents, and the next generation of intelligent applications</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZGKOESOn1hTs71cMoG4ZZQ.png" /></figure><p>Large language models are impressive, but they have fundamental limitations: they only know what they learned during training, they can confidently make things up, and they have no access to your proprietary data. Retrieval-Augmented Generation (RAG) solves all three problems.</p><p>Here’s how RAG works at a high level:</p><ul><li><strong>Problem:</strong> LLMs have a knowledge cutoff date, hallucinate facts, and can’t access private data</li><li><strong>Solution:</strong> Before generating a response, retrieve relevant documents from an external knowledge base and inject them into the prompt</li><li><strong>Documents → Chunks → Embeddings → Vector Database:</strong> Your knowledge base is split into chunks, converted to numerical vectors (embeddings), and stored in a vector database optimized for similarity search</li><li><strong>Query Time:</strong> When a user asks a question, convert it to an embedding, find the most similar document chunks using k-nearest neighbors search, and include those chunks as context for the LLM</li><li><strong>Result:</strong> The LLM generates answers grounded in your actual data, with sources it can cite</li></ul><p>RAG has become the standard architecture pattern for enterprise AI, powering everything from customer service chatbots to legal research tools to coding agents. Let’s break down exactly how it works.</p><h3>Why RAG Is Necessary</h3><p>Large language models like GPT-5, Claude, and Gemini are trained on massive datasets of text from the internet, books, and code. But this training approach creates three fundamental problems:</p><h3>1. Knowledge Cutoff</h3><p>LLMs only know information up to their training cutoff date. Ask about something that happened last week, and the model has no idea. This makes vanilla LLMs useless for real-time information, recent events, or rapidly changing domains like financial markets or medical research.</p><h3>2. Hallucination</h3><p>LLMs are designed to produce fluent, confident text — even when they don’t actually know the answer. This leads to “hallucinations” where the model invents plausible-sounding but completely false information. In high-stakes domains like healthcare, legal, or finance, this is unacceptable.</p><h3>3. No Access to Private Data</h3><p>Your company’s internal documents, customer data, proprietary research, and institutional knowledge never appeared in the model’s training data. A vanilla LLM can’t answer questions about your specific codebase, your company’s policies, or your customer’s order history.</p><p>RAG addresses all three problems by giving the LLM access to external, up-to-date, verified information at query time. Instead of relying solely on what it memorized during training, the model can now reference actual documents — and cite them.</p><h3>How RAG Works: The Complete Pipeline</h3><p>RAG systems have two phases: an <strong>indexing phase</strong> (done once or periodically) and a <strong>query phase</strong> (done for every user request).</p><h3>Phase 1: Indexing Your Knowledge Base</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O_-FT15Ht0hHpX4yGOvQgw.png" /><figcaption>The process of indexing your knowledge base</figcaption></figure><h4>Step 1: Gather Documents</h4><p>Start by collecting the documents you want the system to reference. This could be:</p><ul><li>Internal documentation and wikis</li><li>Product manuals and knowledge base articles</li><li>Legal contracts and case law</li><li>Medical literature and clinical guidelines</li><li>Code repositories and API documentation</li><li>Customer support tickets and FAQ databases</li></ul><h4>Step 2: Chunk the Documents</h4><p>LLMs have limited context windows (even with modern models supporting 1M tokens, you can’t dump your entire knowledge base into every prompt). Documents are split into smaller chunks — typically 200–1000 tokens each.</p><p>Chunking strategies matter. Common approaches include:</p><ul><li><strong>Fixed-size chunks:</strong> Split every N tokens with some overlap</li><li><strong>Semantic chunking:</strong> Split at natural boundaries like paragraphs or sections</li><li><strong>Recursive chunking:</strong> Try larger chunks first, recursively split if needed</li></ul><p>Overlap between chunks (e.g., 10–20%) ensures that concepts spanning chunk boundaries aren’t lost.</p><h4>Step 3: Generate Embeddings</h4><p>Each chunk is passed through an <strong>embedding model</strong> — a neural network that converts text into a dense numerical vector (typically 768–1536 dimensions). These vectors capture semantic meaning: chunks about similar topics will have similar vectors, even if they use different words.</p><p>Popular embedding models include:</p><ul><li>OpenAI’s text-embedding-3-large</li><li>Cohere’s embed-v3</li><li>Voyage AI’s voyage-large-2</li><li>Open-source options like BGE, E5, and GTE</li></ul><h4>Step 4: Store in a Vector Database</h4><p>The embeddings are stored in a specialized <strong>vector database</strong> optimized for similarity search. Unlike traditional databases that match exact values, vector databases find the most similar vectors to a query vector.</p><p>Common vector databases include:</p><ul><li><strong>Pinecone:</strong> Fully managed, scales to billions of vectors</li><li><strong>Weaviate:</strong> Open-source with hybrid search capabilities</li><li><strong>Qdrant:</strong> Open-source, Rust-based, high performance</li><li><strong>Chroma:</strong> Lightweight, developer-friendly, good for prototyping</li><li><strong>pgvector:</strong> PostgreSQL extension for teams already using Postgres</li><li><strong>Milvus:</strong> Open-source, designed for large-scale production</li></ul><h3>Phase 2: Query Time Retrieval</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a655OHDK7vnnwXFv3NSMYA.png" /></figure><h4>Step 1: Embed the Query</h4><p>When a user asks a question, it’s converted to an embedding using the same embedding model used for indexing. This ensures the query vector lives in the same semantic space as the document vectors.</p><h4>Step 2: K-Nearest Neighbors Search</h4><p>The vector database performs a <strong>k-nearest neighbors (k-NN) search</strong> to find the K document chunks most similar to the query embedding.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oQcyln0g5pDhVKnvHdbKzA.png" /></figure><p>Similarity is typically measured using:</p><ul><li><strong>Cosine similarity:</strong> Measures the angle between vectors (most common)</li><li><strong>Euclidean distance:</strong> Measures straight-line distance</li><li><strong>Dot product:</strong> Fast computation, works well for normalized vectors</li></ul><p>At scale, exact k-NN search is too slow. Vector databases use <strong>approximate nearest neighbor (ANN)</strong> algorithms like HNSW (Hierarchical Navigable Small World graphs) or IVF (Inverted File Index) to trade a small amount of accuracy for massive speed improvements — making billion-scale searches possible in milliseconds.</p><h4>Step 3: Construct the Prompt</h4><p>The retrieved chunks are inserted into the prompt, typically in a format like:</p><pre>Use the following context to answer the user&#39;s question.<br>If the context doesn&#39;t contain enough information, say so.</pre><pre>Context:<br>[Retrieved Chunk 1]<br>[Retrieved Chunk 2]<br>[Retrieved Chunk 3]<br>...</pre><pre>User Question: [Original Query]</pre><h4>Step 4: Generate the Response</h4><p>The LLM receives the augmented prompt and generates a response grounded in the retrieved context. Good RAG implementations also ask the model to cite which sources it used, enabling verification and trust.</p><h3>RAG in Modern Chatbots</h3><p>Every major AI assistant now uses RAG or RAG-like techniques to extend their capabilities beyond training data:</p><h3>ChatGPT with Browse and Search</h3><p>When ChatGPT uses web browsing, OpenAI performs real-time web searches, retrieves relevant pages, and injects their content into the conversation context. This is RAG in action — the model answers based on retrieved web content rather than solely its training data.</p><h3>Perplexity</h3><p>Perplexity built its entire product around RAG. Every query triggers web searches across multiple sources, retrieves and processes the content, and generates answers with inline citations. The retrieval is the product.</p><h3>Claude with Document Context</h3><p>When you upload documents to Claude or use Claude’s Projects feature, those documents become the retrieval corpus. Claude searches through your uploaded context to ground its responses in your specific materials.</p><h3>Google’s AI Overviews</h3><p>Google’s AI-generated search summaries are powered by RAG over Google’s search index. The system retrieves relevant web pages for a query and synthesizes an answer from those sources.</p><h3>RAG in Coding Agents</h3><p>Coding agents face an acute version of the RAG problem: codebases are too large to fit in context, change constantly, and contain patterns and conventions specific to each project. RAG is essential for code assistants to actually understand <em>your</em> code.</p><h3>GitHub Copilot</h3><p>GitHub’s latest Copilot coding agent explicitly uses “advanced retrieval augmented generation (RAG) powered by GitHub code search.” When Copilot boots up to work on a task, it clones the repository, analyzes the codebase, and builds a retrieval index. This allows it to understand project-specific patterns, reference relevant files, and make changes consistent with the existing code.</p><p>The Copilot team has discussed their retriever architecture publicly: they build a precompiled index that allows quickly looking up code items relevant to the current task, enabling whole-codebase understanding without stuffing everything into context.</p><h3>Cursor</h3><p>Cursor indexes your codebase and uses embeddings to find semantically relevant code when you ask questions or request changes. The @codebase command explicitly triggers RAG search across your entire project to find relevant files, functions, and patterns.</p><h3>Claude Code</h3><p>Claude Code operates on your local filesystem and uses intelligent file discovery to understand codebases that far exceed its context window. While the exact architecture isn’t public, the behavior — understanding project structure, finding relevant files, and making contextually appropriate changes across large repos — requires retrieval mechanisms.</p><h3>Sourcegraph Cody</h3><p>Sourcegraph Cody is perhaps the most explicitly RAG-focused coding assistant. It builds on Sourcegraph’s code search infrastructure to provide code intelligence across massive monorepos. Cody can search millions of lines of code to find relevant context for any coding task.</p><h3>Companies Using RAG: Real-World Examples</h3><p>RAG has moved from research concept to production infrastructure across industries. Here are concrete examples:</p><h3>Financial Services</h3><p><strong>Morgan Stanley</strong> deployed a GPT-powered RAG system that gives wealth advisors instant access to the firm’s research reports, investment strategies, and compliance documentation. Instead of manually searching through hundreds of thousands of documents, advisors can ask natural language questions and get answers grounded in Morgan Stanley’s proprietary research. The system retrieves relevant documents from their corpus and uses them to generate contextual answers.</p><p><strong>Goldman Sachs</strong> is rebuilding core workflows around intelligent, agentic automation, with RAG as a foundational component. Their AI systems need access to real-time market data, internal research, and compliance requirements — all of which require retrieval architectures.</p><h3>Legal</h3><p><strong>Harvey AI</strong>, now valued at $11 billion, built its entire product on RAG. Their “Vault” feature creates secure, encrypted environments where law firms can connect their proprietary documents. According to OpenAI’s case study on Harvey, they tried fine-tuning and other techniques first, but RAG proved essential for case law research that requires thorough, well-cited answers.</p><p>As Harvard’s Journal of Law &amp; Technology noted, Harvey “makes law firms’ proprietary databases available via RAG systems,” enabling AI that can reference a firm’s specific precedents, contracts, and internal work product.</p><h3>Healthcare</h3><p><strong>Apollo 24|7</strong>, a digital healthcare platform in India, uses Google’s MedPaLM augmented with RAG to build their Clinical Intelligence Engine. The system assists clinicians by providing real-time access to de-identified patient data, drug interaction databases, and the latest clinical guidelines.</p><p><strong>UpToDate</strong> (Wolters Kluwer) provides AI-powered clinical decision support that grounds recommendations in their continuously updated medical evidence database — a classic RAG application where timeliness and accuracy are literally life-or-death concerns.</p><p><strong>Glass Health</strong> uses RAG to connect ambient scribing (transcription of doctor-patient conversations) with clinical knowledge bases, helping generate accurate notes and surface relevant diagnostic information.</p><h3>Customer Service</h3><p><strong>Klarna</strong> deployed an AI assistant that handled two-thirds of customer service chats — 2.3 million conversations — in its first month. The core is a fine-tuned GPT model augmented with RAG that pulls from Klarna’s knowledge base on policies, orders, and merchant data. This grounding in real data is what allows the system to handle sensitive fintech tasks without hallucinating incorrect refund policies or order details.</p><h3>Enterprise Knowledge</h3><p><strong>Notion AI</strong> uses RAG to search across a company’s Notion workspace — potentially millions of pages — when answering questions. Their pipeline achieves 2–10ms per query for vector search across enterprise-scale document sets.</p><p><strong>Glean</strong> ($7.2B valuation) built an enterprise search platform that connects to dozens of data sources — Google Drive, Slack, Salesforce, internal wikis — and provides RAG-powered Q&amp;A across all of them.</p><p><strong>Slack AI</strong> uses RAG to answer questions about your organization’s Slack history, surfacing relevant conversations and documents from across channels you have access to.</p><h3>The Evolving RAG Landscape</h3><p>RAG isn’t standing still. Several trends are reshaping the architecture:</p><h3>Hybrid Search</h3><p>Pure vector search can miss keyword-exact matches that matter. Modern RAG systems combine vector search with traditional keyword search (BM25), getting the best of both semantic understanding and exact matching.</p><h3>Agentic RAG</h3><p>Instead of a single retrieve-then-generate step, agentic RAG systems can iteratively search, evaluate results, refine queries, and synthesize information across multiple retrieval rounds. This is how coding agents explore large codebases — they don’t just do one search, they navigate intelligently.</p><h3>Multi-Modal RAG</h3><p>RAG is expanding beyond text. Systems can now retrieve and reason over images, diagrams, tables, and videos, enabling applications in fields like manufacturing, medical imaging, and design.</p><h3>Context Window Expansion</h3><p>With context windows reaching 1–2 million tokens, some have asked: “Is RAG dead?” The answer is no. Even with massive context, you still can’t fit enterprise-scale knowledge bases into every prompt. More importantly, retrieval provides relevance filtering — you don’t want the model distracted by irrelevant documents. RAG and large context windows are complementary: retrieval finds the needle, large context windows let you include the surrounding haystack.</p><h3>Conclusion</h3><p>RAG has become the standard pattern for building AI systems that need to be accurate, current, and grounded in real data. The core insight is simple but powerful: instead of trying to pack all knowledge into model weights, give the model a librarian that can find relevant information on demand.</p><p>Whether you’re building a customer service bot, a legal research tool, a coding assistant, or an enterprise search product, you’re probably building a RAG system. Understanding the architecture — chunking, embeddings, vector databases, k-nearest neighbors search, and prompt construction — is now essential knowledge for anyone working with AI in production.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9f4488721c41" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/what-is-rag-and-how-does-it-work-with-modern-ai-systems-9f4488721c41">What is RAG and How Does It Work with Modern AI Systems?</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AI Startups You Should Know]]></title>
            <link>https://medium.com/jonathans-musings/ai-startups-you-should-know-48d69d1ddf61?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/48d69d1ddf61</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Tue, 05 May 2026 23:37:33 GMT</pubDate>
            <atom:updated>2026-05-05T23:37:33.829Z</atom:updated>
            <content:encoded><![CDATA[<h4><em>A field guide to the companies defining the next era of AI</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/830/1*q5vxs4Yylwio_fF7DDvXHA.png" /></figure><p>The AI startup market is no longer one market. It is a stack.</p><p>There are frontier labs building the models, infrastructure companies building the compute layer, developer tools changing how software gets written, code review companies trying to verify AI-generated work, enterprise platforms organizing company knowledge, and vertical AI companies going after legal, healthcare, customer support, media, and more.</p><p>Here is a readable map of the companies worth knowing.</p><p>Numbers are based on public reporting as of May 5, 2026. Some are primary rounds, some are reported talks, and some are secondary-market signals, so treat them as directional rather than gospel.</p><h3>1. Frontier model labs</h3><p>These are the companies building the most capable general-purpose AI models.</p><h3>OpenAI</h3><p>$852 billion valuation. $122 billion latest funding round (closed March 31, 2026). Estimated annualized revenue around $25 billion. OpenAI remains the default brand in AI, with ChatGPT, the API platform, Codex, Sora, and enterprise products all pushing toward the same goal: becoming the operating system for AI work.</p><h3>Anthropic</h3><p>$380 billion primary valuation (February 2026), with reports of a potential $50 billion round at $900 billion+ valuation in active talks. Reported annualized revenue is above $30 billion, with some reports closer to $40 billion. Claude Code alone hit $2.5 billion in annualized revenue by February 2026. Anthropic has become OpenAI’s most credible rival, especially in enterprise AI and coding through Claude and Claude Code.</p><h3>xAI / SpaceX</h3><p><em>Major update:</em> xAI was acquired by SpaceX in February 2026 for $250 billion, creating a combined entity valued at $1.25 trillion at the time of the deal. SpaceX is now targeting a June/July 2026 IPO at a reported $1.75 trillion valuation — potentially the biggest IPO in history. Grok remains the AI product, now with distribution advantages through X, Tesla, Starlink, and the broader Musk ecosystem.</p><h3>Mistral AI</h3><p>Roughly $14 billion valuation after major 2025 funding (€1.7 billion Series C at €11.7 billion). In March 2026, Mistral raised an additional $830 million for European data center buildout. Mistral is the leading European frontier model company, with a strong open-model, enterprise, and sovereignty angle.</p><h3>Cohere + Aleph Alpha</h3><p><em>Major update:</em> In April 2026, Cohere announced a merger with Germany’s Aleph Alpha at a combined $20 billion valuation (up from Cohere’s previous $7 billion standalone). The combined entity positions itself as the enterprise AI alternative with strong European and sovereign deployment capabilities.</p><h3>2. AI infrastructure and compute</h3><p>These companies are building the GPU clouds, chips, inference platforms, and data centers powering the AI boom.</p><h3>Lambda</h3><p>Raised $1.5 billion+ in a Series E (November 2025), bringing total funding to roughly $2.3 billion. Currently raising $350 million in pre-IPO convertible notes with an H2 2026 IPO target. Lambda is one of the better-known AI cloud providers and a CoreWeave alternative for companies that need access to GPU infrastructure.</p><h3>Together AI</h3><p>In talks to raise around $1 billion at a $7.5 billion valuation (March 2026); estimated annualized revenue around $1 billion. Together AI sits between infrastructure and developer platform, helping companies train, fine-tune, and deploy open and proprietary models.</p><h3>Cerebras</h3><p>Filed for IPO in April 2026, targeting a $26.6 billion valuation with a $3.5 billion raise. Reported $510 million in 2025 revenue. Cerebras is one of the highest-profile challengers to Nvidia, with wafer-scale AI chips and a major OpenAI partnership.</p><h3>Groq</h3><p>$6.9 billion valuation after a $750 million 2025 raise. Additionally, in December 2025, Groq signed a non-exclusive licensing deal with Nvidia for its inference technology worth $17 billion in payments through 2026. Groq is focused on fast AI inference, betting that once AI moves from training-heavy to usage-heavy, speed and cost per token become central.</p><h3>Crusoe</h3><p>Raised $1.375 billion Series E at a $10 billion valuation (October 2025). Named one of Fast Company’s 2026 Most Innovative Companies. Crusoe is building AI data center and energy infrastructure, which matters because the AI bottleneck is increasingly power, land, cooling, and chips rather than just software.</p><h3>3. AI coding and developer tools</h3><p>This is one of the most important categories because software engineering is one of the first areas where AI is clearly changing day-to-day work.</p><h3>Cursor / Anysphere</h3><p>Cursor closed a $2.3 billion Series D in November 2025 at a $29.3 billion valuation. In April 2026, SpaceX announced a strategic partnership with an option to acquire Cursor for $60 billion (or a $10 billion partnership deal). Cursor reached around $2 billion in ARR by February 2026 and is reportedly forecasting more than $6 billion by year-end. Microsoft reportedly examined an acquisition before choosing not to bid. Cursor is the breakout AI IDE and arguably the most important developer tool startup of the AI era.</p><h3>Replit</h3><p>Raised $400 million Series D at a $9 billion valuation in March 2026–3x its valuation from just six months prior. Annualized revenue reportedly grew from $2.8 million to $150 million in less than a year. Replit is becoming an AI app-building platform for both developers and non-developers, with Agent 3 pushing it further into autonomous software creation.</p><h3>Lovable</h3><p>$6.6 billion valuation after a $330 million Series B (December 2025). Reported ARR has been cited around $200 million to $400 million depending on source and timing. Lovable is one of the clearest winners in “vibe coding,” letting users generate full-stack apps from prompts.</p><h3>Cognition / Devin</h3><p>$10.2 billion valuation after a $400 million raise (September 2025); in talks for a new round at around $25 billion (April 2026). Cognition’s Devin popularized the “AI software engineer” concept, and the company became even more strategically interesting after acquiring Windsurf.</p><h3>Factory</h3><p>$1.5 billion valuation after a $150 million Series C led by Khosla Ventures (April 2026). Factory is building AI coding agents for enterprise engineering teams, which means its challenge is not just code generation but security, repo context, CI, review workflows, and organizational trust.</p><h3>Warp</h3><p>Total funding around $73 million; growing at roughly $1 million ARR every 10 days as of late 2025. Warp started as a Rust-based terminal and is increasingly becoming an agentic developer workflow product with 700,000+ developers on the platform.</p><h3>Bolt.new / StackBlitz</h3><p>$700 million valuation; $135 million total funding as of December 2025. Bolt is part of the same app-generation wave as Lovable and Replit, focused on letting users quickly create, edit, and deploy applications from natural language.</p><h3>4. Code review, verification, and software quality</h3><p>If AI writes more code, teams will need better ways to validate that code.</p><h3>Greptile</h3><p>$180 million valuation after a $25 million Series A led by Benchmark (September 2025). Total funding around $45 million. Greptile is building AI code review, a category that should become more important as teams generate more code than humans can comfortably review by hand.</p><h3>Sourcegraph</h3><p>Last major private valuation: $2.625 billion from its 2021 Series D. Sourcegraph is not a new AI-native startup, but code search and code intelligence are foundational for agents that need to understand large, messy production codebases.</p><h3>Graphite</h3><p>Valuation not widely public. Graphite started with stacked pull requests and developer workflow tooling, but its position around code review and PR workflows makes it relevant in a world where AI produces more diffs.</p><h3>CodeRabbit</h3><p>Valuation not widely public. CodeRabbit is another AI code review company worth watching because independent review is becoming one of the obvious complements to AI code generation.</p><h3>5. Agent infrastructure</h3><p>These companies are building the rails agents need: search, browsing, memory, tool use, workflow orchestration, and long-running task execution.</p><h3>Perplexity</h3><p>Valuation between $21 billion and $22.6 billion (January 2026); estimated ARR around $200 million by February 2026. Perplexity is best known as an AI search company, but it is increasingly an answer engine and agentic research surface.</p><h3>Parallel Web Systems</h3><p>$2 billion valuation after a $100 million Series B (April 29, 2026). Founded by former Twitter CEO Parag Agrawal, Parallel is building web infrastructure for AI agents that need to search, retrieve, and reason over the web more reliably than humans clicking links.</p><h3>Browserbase</h3><p>Valuation not widely public. Browserbase is part of the emerging browser-infrastructure category: hosted browsers, automation, and web interaction for AI agents that need to use websites as tools.</p><h3>Exa</h3><p>Valuation not widely public. Exa is building search infrastructure for AI applications, which matters because agents need retrieval systems optimized for machine reasoning rather than human search-result pages.</p><h3>6. Enterprise knowledge and productivity</h3><p>These companies are trying to become the AI layer across company documents, Slack, tickets, email, CRM, permissions, and workflows.</p><h3>Glean</h3><p>$7.2 billion valuation after a $150 million Series F (February 2026); reported ARR around $200 million. Glean started as enterprise search and is evolving into a broader enterprise AI platform for company knowledge and agentic workflows.</p><h3>Writer</h3><p>$1.9 billion valuation after a $200 million Series C (November 2024). Writer is focused on enterprise AI, brand-safe generation, workflows, and governance rather than generic chatbot usage.</p><h3>Notion AI</h3><p>Notion is not purely an AI startup, but it belongs in this category. Its AI features sit directly inside docs, wikis, projects, and company knowledge, making it a strong example of AI embedded into existing productivity workflows.</p><h3>Hebbia</h3><p>$700 million valuation after a $130 million Series B (July 2024). Hebbia is focused on AI for knowledge work, especially document-heavy analysis in financial services, legal, and professional services.</p><h3>7. Vertical AI applications</h3><p>These companies go deep into one domain instead of trying to be a generic assistant.</p><h3>Harvey</h3><p>$11 billion valuation after a $200 million raise (March 2026); reported annualized revenue above $200 million. Harvey is the breakout legal AI company, selling into law firms and legal departments for contract analysis, due diligence, compliance, litigation, and legal research.</p><h3>Legora</h3><p>$5.6 billion valuation after a $550 million Series D (March 2026), with additional Nvidia NVentures investment announced in April 2026. Legora is another major legal AI startup, and its rise suggests legal AI is becoming a real category rather than a one-company market.</p><h3>Sierra</h3><p>Over $15 billion valuation after a $950 million round (announced May 4, 2026); previously reported to be on track for more than $100 million in ARR. Sierra, founded by Bret Taylor and Clay Bavor, is building AI agents for customer experience and support workflows. Now has more than $1 billion to work with.</p><h3>OpenEvidence</h3><p>$12 billion valuation after a $250 million Series D (January 2026); reported annualized revenue around $100 million. OpenEvidence is often described as “ChatGPT for doctors,” which makes it one of the more important healthcare AI companies to watch.</p><h3>Abridge</h3><p>Valuation not included here because current public numbers vary. Abridge is focused on AI medical documentation, a very real workflow pain point for doctors and health systems.</p><h3>Decagon</h3><p>Valuation not included here because public numbers vary. Decagon is another customer support AI company, competing in the same broad enterprise support automation category as Sierra.</p><h3>8. Generative media and communication</h3><p>These companies are building AI for voice, video, avatars, images, and synthetic media.</p><h3>ElevenLabs</h3><p>$11 billion valuation after a $500 million Series D (February 2026); closed 2025 with more than $330 million in ARR. ElevenLabs is the leading AI voice company and is expanding into dubbing, customer support, conversational commerce, training, and voice agents.</p><h3>Runway</h3><p>$5.3 billion valuation after a $315 million Series E (February 2026). Total funding around $860 million. Runway is one of the major AI video companies, now increasingly talking about world models rather than only video generation.</p><h3>Synthesia</h3><p>$4 billion valuation after a $200 million Series E (January 2026). Used by 70% of FTSE 100 companies. Synthesia focuses on AI avatars and enterprise video, especially training, enablement, onboarding, and internal communication.</p><h3>Midjourney</h3><p>Valuation not widely public, but culturally enormous. Midjourney remains one of the most important image generation products, especially in creative, design, and visual ideation workflows.</p><h3>9. Physical-world AI and robotics</h3><p>This category is less mature than software AI, but the upside is enormous.</p><h3>Figure AI</h3><p>$39 billion valuation after a $1 billion+ Series C (2025/2026), with total funding exceeding $1.9 billion. Figure is building humanoid robots and is one of the more visible companies trying to bring foundation-model-style progress into physical work.</p><h3>Physical Intelligence</h3><p>In talks to raise $1 billion at a valuation exceeding $11 billion (March 2026). Physical Intelligence is working on general-purpose AI for robots, a technically hard problem with massive long-term implications.</p><h3>Skild AI</h3><p>$14 billion valuation after a $1.4 billion Series C led by SoftBank (January 2026). Skild is another robotics foundation model company, betting that the next big AI wave includes embodied systems, not just text boxes.</p><h3>And that’s a wrap!</h3><p>If I had to compress the entire landscape into a watchlist, I’d pick these:</p><p><strong>Frontier labs:</strong> OpenAI, Anthropic, xAI/SpaceX, Mistral, Cohere+Aleph Alpha</p><p><strong>AI coding:</strong> Cursor, Replit, Lovable, Cognition, Factory, Greptile</p><p><strong>Infrastructure:</strong> Lambda, Together AI, Cerebras, Groq, Crusoe</p><p><strong>Enterprise AI:</strong> Glean, Writer, Sierra</p><p><strong>Vertical AI:</strong> Harvey, Legora, OpenEvidence</p><p><strong>Agent infrastructure:</strong> Perplexity, Parallel, Browserbase, Exa</p><p><strong>Media:</strong> ElevenLabs, Runway, Synthesia</p><p><strong>Robotics:</strong> Figure, Physical Intelligence, Skild</p><p>The big pattern is that “AI startup” no longer means one thing.</p><p>Some of these companies are building models. Some are building infrastructure. Some are building workflows. Some are replacing old SaaS categories. Some are creating entirely new behavior.</p><p>The first phase of the AI boom was about who had the best model.</p><p>The next phase is about who owns the workflow.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=48d69d1ddf61" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/ai-startups-you-should-know-48d69d1ddf61">AI Startups You Should Know</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why is Rust so hip?]]></title>
            <link>https://medium.com/jonathans-musings/why-is-rust-so-hip-d51d33d937d6?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d51d33d937d6</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Mon, 04 May 2026 14:57:13 GMT</pubDate>
            <atom:updated>2026-05-05T16:29:19.471Z</atom:updated>
            <content:encoded><![CDATA[<h4>Everyone’s rewriting everything in Rust. Here’s why that actually makes sense.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/932/1*hADFdaYoVhfZzwLXS9sh-Q.png" /></figure><p>A year ago, I joined Datadog. Along the way, the team that built our new new CLI for AI agents called <a href="https://github.com/datadog-labs/pup">Pup</a> refactored the codebase from Go to Rust.</p><p>This wasn’t an anomaly. It was a pattern.</p><p>At my previous company, <a href="https://www.geteppo.com/">Eppo</a> (acquired by Datadog), we built a <a href="https://docs.rs/eppo_core/latest/eppo_core/">Rust core SDK</a> that powers our feature flagging across every language — JavaScript, Python, Ruby, you name it. The same evaluation logic, compiled once, wrapped everywhere.</p><p>And everywhere I look in the developer tools space, the story is the same: Rust is eating software. Not because it’s trendy. Because it solves real problems that other languages can’t.</p><h3>The Evidence is Everywhere</h3><p>Let’s start with what prompted this post. In the last few months alone:</p><p><a href="https://github.com/warpdotdev/warp"><strong>Warp just open-sourced their terminal</strong></a> — 1.2 million lines of Rust. This is an “agentic development environment” (their words) that runs AI coding agents like Claude Code and Codex directly in the terminal. OpenAI is their founding sponsor. They chose Rust not because it was trendy, but because building a high-performance terminal with native rendering and complex state management basically requires it.</p><p><a href="https://github.com/openai/codex"><strong>OpenAI’s Codex CLI</strong></a> — their local coding agent — is written in Rust. Not Python. Not TypeScript. Rust. When OpenAI needs a fast, reliable, cross-platform binary that developers will actually run on their machines, they reach for Rust.</p><p><a href="https://github.com/datadog-labs/pup"><strong>Datadog’s Pup CLI</strong></a> gives AI agents programmatic access to the entire Datadog platform — 200+ commands across 33+ product domains. Why Rust? Because when you’re building a CLI that AI agents will invoke thousands of times, startup time and memory footprint actually matter.</p><p><a href="https://docs.geteppo.com/sdks/server-sdks/rust/intro"><strong>Eppo’s SDK architecture</strong></a> uses a Rust core (eppo_core) for flag evaluation, then wraps it for each target language. One codebase. Consistent behavior everywhere. No divergence bugs. This is the FFI (foreign function interface) superpower pattern I&#39;ll talk more about below.</p><h3>Rust Has Already Won JavaScript Tooling</h3><p>If you’re a JavaScript or Python developer, you’re probably already using Rust. You just might not know it.</p><ul><li><a href="https://github.com/astral-sh/ruff"><strong>Ruff</strong></a> — The Python linter that’s 10–100x faster than Flake8. Written in Rust.</li><li><a href="https://github.com/astral-sh/uv"><strong>uv</strong></a> — Python package manager that makes pip feel like it’s from 1995. Written in Rust.</li><li><a href="https://swc.rs/"><strong>SWC</strong></a> — The Babel replacement powering Next.js. Written in Rust.</li><li><a href="https://turbo.build/pack"><strong>Turbopack</strong></a> — Vercel’s successor to Webpack. Written in Rust.</li><li><a href="https://rspack.dev/"><strong>Rspack</strong></a> — ByteDance’s Webpack replacement. Written in Rust.</li><li><a href="https://biomejs.dev/"><strong>Biome</strong></a> — The Rome fork that actually shipped. Linter + formatter. Written in Rust.</li><li><a href="https://oxc.rs/"><strong>Oxc</strong></a> — The “JavaScript Oxidation Compiler.” Guess what it’s written in.</li></ul><p>Lee Robinson (VP of Product at Vercel) predicted this back in 2021. By 2026, he notes, “nearly every major JavaScript build tool now has a Rust-based alternative or has been rewritten in Rust.”</p><p>He was right.</p><h3>The AI/ML Ecosystem is Following</h3><p>The pattern is expanding into AI tooling:</p><ul><li><a href="https://github.com/huggingface/candle"><strong>Candle</strong></a> — Hugging Face’s minimalist ML framework for Rust. Designed for serverless inference where startup time matters.</li><li><a href="https://www.pola.rs/"><strong>Polars</strong></a> — The DataFrame library that makes Pandas feel slow. Written in Rust, with Python bindings.</li><li><a href="https://deno.land/"><strong>Deno</strong></a> — The TypeScript-native runtime with built-in tooling. Rust core.</li></ul><p>When you need fast inference on constrained resources — edge devices, serverless functions, embedded systems — Rust’s zero-cost abstractions become non-negotiable.</p><h3>Why Rust? The Real Reasons</h3><p>So why is everyone reaching for Rust? It’s not just hype. Here’s what actually matters:</p><h3>1. Performance without runtime cost</h3><p>Rust has no garbage collector. No runtime. When your code compiles, it compiles to native machine code that starts instantly and uses exactly the memory it needs.</p><p>For CLI tools, this means sub-millisecond startup times. For servers, this means predictable latency without GC pauses. For AI agents invoking tools thousands of times, this adds up fast.</p><h3>2. Memory safety without the overhead</h3><p>Rust’s borrow checker catches entire categories of bugs at compile time:</p><ul><li>No null pointer exceptions</li><li>No data races</li><li>No use-after-free</li><li>No buffer overflows</li></ul><p>This isn’t theoretical. The Linux kernel now officially supports Rust as of 2025 — the first new language added since C in 1991. Microsoft’s Galen Hunt publicly stated the goal of eliminating all C/C++ from Microsoft by 2030, with Rust as the replacement.</p><p>Memory safety has gone from “nice to have” to “regulatory requirement” in many industries.</p><h3>3. The FFI (Foreign Function Interface) superpower</h3><p>This is the one that doesn’t get enough attention.</p><p>Rust compiles to native code with C-compatible FFI. This means you can write your core logic once and call it from Python, JavaScript, Ruby, Go, Java — basically anything.</p><p>This is exactly what we did at Eppo. The eppo_core crate handles all flag evaluation logic. Each language SDK wraps it. One implementation. Zero drift. When we fix a bug or add a feature, every SDK gets it automatically.</p><p>Compare this to maintaining parallel implementations in 8 languages. The math is obvious.</p><h3>4. WebAssembly is a first-class target</h3><p>Rust compiles to WASM beautifully. This means the same code that runs on your server can run in the browser, in Cloudflare Workers, in edge functions — anywhere.</p><p>For SDK authors, this is transformative. Write once, deploy everywhere, with near-native performance.</p><h3>5. Modern tooling that actually works</h3><p>Cargo is a great package manager. It has:</p><ul><li>Dependency management that makes sense</li><li>Built-in testing, benchmarking, documentation</li><li>Reproducible builds by default</li><li>A package registry (<a href="http://crates.io/">crates.io</a>) that doesn’t feel like archeology</li></ul><p>When you come from npm’s node_modules or Python’s “did you activate the right virtualenv?” experience, Cargo feels like the future.</p><h3>The Honest Tradeoffs</h3><p>Rust isn’t free. The learning curve is real.</p><p>The borrow checker will fight you. Lifetimes are confusing at first. Compile times are longer than Go. The ecosystem is younger than Java, JavaScript or Python.</p><p>But here’s what I’ve observed: teams that invest in Rust tend to have fewer bugs in production, lower operational costs, and faster runtime performance. The upfront cost pays dividends.</p><p>And with AI coding assistants getting better at Rust, the learning curve is flattening. Claude and Codex can write idiomatic Rust now. The barrier to entry is dropping.</p><h3>The Pattern I’m Seeing</h3><p>Here’s my synthesis:</p><p><strong>Rust is winning in three specific domains:</strong></p><ol><li><strong>Developer tools and CLIs</strong> — Where startup time, memory footprint, and cross-platform binaries matter.</li><li><strong>Core SDKs with multi-language wrappers</strong> — Where maintaining N parallel implementations is a nightmare.</li><li><strong>Performance-critical infrastructure</strong> — Where GC pauses are unacceptable and memory safety is required.</li></ol><p>If your project fits one of these categories, Rust deserves serious consideration.</p><p>If you’re building a CRUD app? Probably overkill. Use whatever ships fastest.</p><p>But for the tools that other developers depend on — the compilers, the CLIs, the SDKs, the infrastructure — Rust has become the obvious choice.</p><h3>What I’m Watching</h3><p>The next wave is AI tooling. The intersection of Rust’s performance characteristics with the demands of AI inference — low latency, predictable resource usage, edge deployment — is too compelling to ignore.</p><p>Candle is just the beginning. I expect to see more Rust-based inference engines, more AI agents written in Rust, more ML tooling that takes performance seriously.</p><p>The question isn’t whether Rust will continue growing. It’s which domain gets rewritten next.</p><p><em>What’s your take? Are you seeing Rust adoption in your organization? I’d love to hear about it in the comments.</em></p><p>— <br>Jonathan Fulton<br>Staff Software Engineer at Datadog</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d51d33d937d6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/why-is-rust-so-hip-d51d33d937d6">Why is Rust so hip?</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What Warp’s Open Source Release Tells Us About the Future of Agentic Software Development]]></title>
            <link>https://medium.com/jonathans-musings/what-warps-open-source-release-tells-us-about-the-future-of-agentic-software-development-5d4409726bf1?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/5d4409726bf1</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Sun, 03 May 2026 23:00:16 GMT</pubDate>
            <atom:updated>2026-05-03T23:00:16.643Z</atom:updated>
            <content:encoded><![CDATA[<h4>I dug through Warp’s newly open-sourced codebase and contribution model. The most interesting part is not that the terminal is written in Rust. It is that the repo itself is designed for humans managing agents.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9q0BDKqZS5xf0IlgQF5RVA.png" /></figure><p>Warp recently open sourced its client codebase.</p><p>That alone is interesting. Warp is one of the more ambitious developer tools of the last few years: a modern terminal, a code-oriented workspace, an AI agent interface, and now increasingly an “agentic development environment.” But the more interesting part is not merely that the source code is public. The interesting part is <em>how</em> Warp is trying to run the project.</p><p>This is not a traditional open source release where a company dumps a repo on GitHub and hopes contributors show up. Warp is explicitly experimenting with a new development model: humans propose ideas, write specs, validate behavior, and supervise agents that do much of the implementation and review work.</p><p>Warp describes the client as now open source, with an agent-first contribution workflow managed by Oz, its cloud agent orchestration platform. OpenAI is the founding sponsor of the open source repository, and the agentic management workflows are powered by GPT models.</p><p>I spent some time reading through the repository, the contribution docs, the agent skill files, and the engineering guide. Here are the most interesting things I learned.</p><h3>1. Warp did not just open source a product. It open sourced a workflow.</h3><p>The biggest takeaway from reading the repo is that Warp is trying to make the repository itself agent-native.</p><p>The README points contributors to a public “Warp Contributions Overview Dashboard” where people can watch Oz agents triage issues, write specs, implement changes, review PRs, track in-flight features, and click into active agent sessions in a web-compiled Warp terminal.</p><p>That is a very different framing from “please fork the repo and send us a pull request.”</p><p>The contribution model starts with issues. Features are not supposed to jump directly into code. Instead, they move through readiness labels, product specs, tech specs, implementation, Oz review, SME review, CI, and then merge.</p><p>In other words, Warp is treating open source contribution as an orchestration problem.</p><p>That feels directionally correct to me.</p><p>As AI coding agents get better, writing code is no longer always the scarce resource. The scarce resources become:</p><ul><li>deciding what should be built</li><li>specifying behavior precisely</li><li>validating that the implementation matches intent</li><li>reviewing edge cases</li><li>maintaining architectural coherence</li><li>deciding when “working” is actually “done”</li></ul><p>Warp’s launch post says this explicitly: they believe the bottleneck is no longer writing code, but the human-in-the-loop work around code, especially speccing and verifying behavior.</p><p>That lines up with my own experience using agents in production. The code is increasingly cheap. Taste, judgment, context, and verification are not.</p><h3>2. The repo has agent instructions as first-class artifacts</h3><p>One of the most interesting directories is .agents/skills.</p><p>This is not just a CONTRIBUTING.md file written for humans. Warp ships repo-specific skills for agents: adding feature flags, adding telemetry, creating PRs, diagnosing CI failures, implementing specs, reviewing PRs, writing product specs, writing tech specs, resolving merge conflicts, writing Rust unit tests, and following Warp UI guidelines.</p><p>That is a big deal.</p><p>Most repositories today are still optimized for human contributors. You might have a README, a style guide, some CI scripts, maybe a docs folder. Warp’s repo is structured around the assumption that agents will be contributors too.</p><p>The write-product-spec skill is especially revealing. It tells the agent that the product spec should make desired behavior “unambiguous enough that an agent can implement it correctly and avoid regressions.” It also says the behavior section is the core of the spec and should enumerate defaults, inputs, user-visible states, error states, loading states, cancellation, offline behavior, races, accessibility, focus expectations, and invariants.</p><p>That is exactly the kind of documentation agents need.</p><p>Not vague product intent. Not “make this better.” Not “add support for X.”</p><p>Instead: numbered, testable behavioral invariants.</p><p>This is probably one of the underrated lessons of AI-assisted engineering: agents are much more effective when your process forces humans to make implicit assumptions explicit.</p><p>A good spec is not bureaucracy anymore. It is executable context.</p><h3>3. Warp’s review process assumes agents are the first reviewer, not the last resort</h3><p>Warp’s contribution docs say that when a PR is opened, Oz is automatically assigned and produces the initial review. Only after Oz approves does the PR get routed to a Warp team subject-matter expert.</p><p>That is a meaningful inversion.</p><p>In many engineering teams, AI review is still treated as optional. A nice-to-have. Something a developer might run before asking a human for review.</p><p>Warp is making the agent review a required gate before human review.</p><p>The review-pr skill is also quite concrete. It tells the agent to focus on correctness, security, error handling, and meaningful performance issues. It requires structured output in review.json, with categories like critical, important, suggestion, and nit. It even tells the agent to avoid posting directly to GitHub and to validate the JSON with jq.</p><p>This is a nice example of something I expect to become common: agents producing machine-readable review artifacts, not just chatty prose.</p><p>That matters because the future of code review is probably not one agent leaving a giant wall of text on your PR. It is agents generating structured findings that can be filtered, deduplicated, escalated, suppressed, turned into suggestions, routed to owners, and measured over time.</p><p>The hard part is not getting an LLM to say something about a diff. The hard part is making its review output operationally useful.</p><p>Warp’s repo is clearly thinking about that.</p><h3>4. The open source release is opinionated about specs before code</h3><p>The contribution process distinguishes bug fixes from features.</p><p>Bug fixes can generally go straight to implementation once triaged. Feature work, however, goes through a spec PR first. The product spec defines behavior from the user or consumer perspective. The tech spec explains the implementation plan, relevant files, module changes, data flow, tradeoffs, and validation plan.</p><p>This is not surprising in a normal engineering org. It is more interesting in an open source repo.</p><p>Most open source projects historically have a bias toward code. Someone scratches an itch, sends a patch, argues in the PR, and eventually the maintainer decides whether the change belongs.</p><p>Warp is moving design discussion earlier in the funnel. The repo already contains a large specs/ directory with many app-ticket-style spec folders.</p><p>I like this pattern for agentic development.</p><p>When agents write more of the code, the risk shifts from “can we implement this?” to “are we implementing the right thing?” A spec-first workflow slows down the part that should be slow: product judgment and design clarity. Then it speeds up the part that can increasingly be automated: code generation and mechanical implementation.</p><p>That is a good trade.</p><p>It also fits a lesson I have learned using Claude Code, Cursor, Codex, and other tools: the best agent workflows look suspiciously like good senior-engineer workflows. Define the goal. Identify constraints. Write down invariants. Make a plan. Implement incrementally. Run tests. Review the diff. Update the plan when reality disagrees.</p><p>Agents did not eliminate engineering discipline. They made engineering discipline more valuable.</p><h3>5. Warp’s architecture is Rust-heavy, modular, and very much not “just a terminal”</h3><p>The GitHub language breakdown shows the repo is overwhelmingly Rust: about 98% Rust at the time I checked.</p><p>The top-level Cargo workspace includes the main app plus many crates: AI, command parsing, computer use, editor, GraphQL, LSP, persistence, repo metadata, settings, terminal, UI, virtual filesystem, voice input, Warp CLI, Warp terminal, Warp UI, and more.</p><p>The engineering guide describes Warp as a Rust-based terminal emulator with a custom UI framework called WarpUI. It calls out major app areas including terminal emulation, shell management, AI integration, Agent Mode, Drive, authentication, settings, workspace/session management, and GraphQL.</p><p>That tells you something about what Warp has become.</p><p>The terminal is still there, but the product is no longer merely “a terminal emulator.” It is a developer workspace with:</p><ul><li>terminal blocks</li><li>AI agents</li><li>code context</li><li>cloud sync</li><li>notebooks</li><li>Drive objects</li><li>diff and review surfaces</li><li>file trees</li><li>remote sessions</li><li>settings and feature flags</li><li>integration tests</li><li>custom UI primitives</li></ul><p>This mirrors a broader trend. The terminal, editor, browser, and AI chat surface are starting to blur together. Cursor pulled AI into the editor. Claude Code and Codex pulled AI into the terminal. Warp is trying to make the terminal itself into a richer agentic workspace.</p><p>Whether that wins is an open question, but the architecture makes the ambition obvious.</p><h3>6. The custom UI framework may be one of the most reusable pieces</h3><p>Warp’s README says the warpui_core and warpui crates are MIT licensed, while the rest of the repository is AGPL v3.</p><p>That licensing split is interesting.</p><p>The product code is AGPL, which discourages closed-source commercial forks. But the UI framework is MIT, which makes it much easier for other projects to reuse.</p><p>The engineering guide describes WarpUI as a custom UI framework built around an Entity-Component-Handle pattern. There is a global App object that owns views and models, views hold handles to other views, AppContext provides temporary access during render/events, and elements describe visual layout in a Flutter-inspired way.</p><p>That sounds like one of the more technically interesting parts of the codebase.</p><p>Terminals are weird UI applications. They need high-performance rendering, keyboard precision, mouse handling, text selection, panes, tabs, overlays, scrollback, terminal emulation, and now AI-native surfaces like diffs, file trees, chat, and agent status. Electron is not always a great fit for that. Native UI frameworks can be limiting. Building a custom Rust UI framework is expensive, but it can make sense if the product has unusual interaction requirements.</p><p>By MIT licensing WarpUI, Warp may be creating a path for other Rust desktop apps to borrow some of that work without adopting the whole Warp product or AGPL obligations.</p><p>That is a smart open source move.</p><h3>7. Warp is explicitly multi-agent and multi-harness, but Oz is the “happy path”</h3><p>Warp’s launch post says the product is multi-model and multi-harness, and that the open source release doubles down on that openness. It also says Warp is adding support for a wider range of open source models, including Kimi, MiniMax, Qwen, and an “auto (open)” model-routed option.</p><p>The README says users can bring their own CLI agent, including Claude Code, Codex, Gemini CLI, and others.</p><p>But the contribution process clearly prefers Oz. The launch post says contributors are free to use other coding agents, but Warp prefers Oz because it has the correct skills and verification loops built in.</p><p>That tension is worth watching.</p><p>On one hand, Warp is positioning itself as open and multi-agent. On the other hand, the best-supported path for contributing is through its own orchestration system.</p><p>This is not necessarily bad. In fact, it may be the only practical way to make agentic open source contribution work at scale. If maintainers are going to trust agent-generated code, they need repeatable processes, repo-specific context, verification loops, and review gates. A random local agent with unknown prompts and unknown tool use is harder to trust.</p><p>But it does mean that the future of open source may not be “anyone with a text editor can send a patch.”</p><p>It may be “anyone can participate, but high-throughput contribution happens through shared agent infrastructure.”</p><p>That is a subtle but important shift.</p><h3>8. The repo shows how much context modern AI coding agents need</h3><p>The WARP.md file is basically a condensed engineering onboarding document for agents and humans. It explains build commands, test commands, lint commands, architecture, UI patterns, terminal model locking risks, database usage, GraphQL generation, feature flags, and style conventions.</p><p>Some of the details are exactly the sort of thing an agent needs to avoid creating subtle bugs.</p><p>For example, the guide warns developers to be careful calling model.lock() on the terminal model because acquiring multiple locks from different call sites can deadlock and freeze the UI. It recommends passing already-locked model references down the call stack and keeping lock scopes short.</p><p>That is not generic Rust advice. That is repo-specific scar tissue.</p><p>This is where agent performance will increasingly come from. Not just better models. Better context.</p><p>The best agents will know:</p><ul><li>how the repo is built</li><li>where tests live</li><li>what patterns are preferred</li><li>what patterns are dangerous</li><li>which abstractions are stable</li><li>which parts of the codebase are legacy</li><li>how maintainers expect PRs to be structured</li><li>what invariants must not regress</li></ul><p>In other words, the future of AI coding is not just “bigger model.” It is “bigger model plus better repo memory plus better local tools plus better review loops.”</p><p>Warp’s repo is a good example of that direction.</p><h3>9. Open source is being used as a competitive strategy, not charity</h3><p>Warp is refreshingly direct about why they are doing this.</p><p>The launch post says open sourcing is fundamentally tied to building a successful business. Warp is competing with well-funded, closed-source competitors and believes opening the product plus giving the community resources to improve it is a way to accelerate product development.</p><p>That is honest, and I think it is important.</p><p>Open source has always had a mix of motivations: ideology, community, developer adoption, recruiting, support burden reduction, ecosystem building, and commercial strategy. Warp’s release is very clearly in the commercial-strategy bucket, but with a new twist: agentic leverage.</p><p>The bet seems to be:</p><ol><li>Make the client open source.</li><li>Let the community propose ideas and validate behavior.</li><li>Use Oz agents to scale implementation and review.</li><li>Keep the cloud/orchestration/business layer commercially valuable.</li><li>Move faster than closed competitors.</li></ol><p>That is a very 2026 open source strategy.</p><p>The question is whether the community will accept it. Some developers will love it because they can finally inspect and contribute to Warp. Others will be skeptical because the contribution workflow routes through proprietary agent infrastructure and the non-UI product code is AGPL, not MIT or Apache.</p><p>Both reactions are reasonable.</p><p>But regardless of where you land philosophically, the release is worth studying because it is one of the clearest examples so far of a company trying to redesign open source around agents.</p><h3>Final Thoughts</h3><p>I came into this expecting to find interesting Rust architecture.</p><p>I did find that. Warp is a large Rust codebase with a custom UI framework, a modular workspace structure, terminal emulation, AI integration, repo metadata, remote sessions, persistence, GraphQL, feature flags, and a lot of platform-specific complexity.</p><p>But the bigger story is not the code.</p><p>The bigger story is the operating model.</p><p>Warp’s open source repo is a public experiment in agent-managed software development. The repo contains not only source code, but also agent skills, spec workflows, review schemas, contribution gates, and context files designed to make agents more effective.</p><p>That feels like the future.</p><p>Not because every repo will use Oz. Not because every company will open source its product. Not because agents will magically replace maintainers.</p><p>But because more and more software development will be organized around a new division of labor:</p><p>Humans decide what matters.</p><p>Humans define the behavior.</p><p>Humans review the tradeoffs.</p><p>Humans validate the result.</p><p>Agents do more and more of the mechanical work in between.</p><p>Warp’s repo is one of the first open source projects I have seen that really leans into that model. Whether it succeeds or not, I suspect many other projects will copy pieces of it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5d4409726bf1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/what-warps-open-source-release-tells-us-about-the-future-of-agentic-software-development-5d4409726bf1">What Warp’s Open Source Release Tells Us About the Future of Agentic Software Development</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[5 Management Tips in the Age of AI]]></title>
            <link>https://medium.com/jonathans-musings/5-management-tips-in-the-age-of-ai-2b0ecb739b22?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/2b0ecb739b22</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Sat, 02 May 2026 22:43:28 GMT</pubDate>
            <atom:updated>2026-05-02T22:43:28.313Z</atom:updated>
            <content:encoded><![CDATA[<h4>Engineering managers do not need to become full-time prompt engineers. But they do need to understand how AI changes the job of building software.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FvkZgHDKYcv1LgLDzigwgQ.png" /></figure><p>I’ve spent the last year deep in AI-assisted coding. As a Staff Software Engineer at Datadog, I use Claude Code daily — and before that at Eppo, ID.me, and Storyblocks, I was on the management side, leading teams through major technical shifts.</p><p>The AI coding revolution is different. It’s not just a new framework or a cloud migration. It’s a fundamental change in how software gets written. And that means management has to change too.</p><p>Here’s what I’ve learned from both sides of the table.</p><h3>1. Get Your Hands Dirty with AI Tools</h3><p>You can’t manage what you don’t understand.</p><p>This has always been true in engineering management, but it’s especially critical now. AI coding tools like Claude Code, Cursor, and Codex aren’t incremental improvements — they’re a paradigm shift. The productivity gains are real (I’ve written extensively about this), but so are the failure modes.</p><p>When I was interim Head of Engineering at Eppo, I made a point of staying close to the code. That instinct matters even more today. If you’re not using these tools yourself, you’re flying blind:</p><ul><li>You won’t understand what “good” AI-assisted output looks like</li><li>You can’t evaluate whether your team’s struggles are skill gaps or tool limitations</li><li>You’ll miss opportunities to coach on prompting, context management, and agent workflows</li></ul><p>Block time on your calendar. Spin up Claude Code on a real problem — even if it’s just understanding a confusing part of your codebase. The learning curve is steep at first, but it flattens fast.</p><h3>2. Use AI to Make Your Job Easier</h3><p>Here’s a truth that took me too long to internalize: the boring parts of management are exactly where AI shines.</p><p>Performance review season used to mean days of compiling data, cross-referencing PRs, digging through Slack threads. Now? I point Claude at the raw materials and get a first draft in minutes. Same with:</p><ul><li><strong>Email drafts</strong> — especially delicate ones that need the right tone</li><li><strong>Confluence documentation</strong> — architectural decision records, onboarding guides, process docs</li><li><strong>Meeting prep</strong> — synthesizing context from multiple sources</li><li><strong>Status updates</strong> — pulling together what shipped, what’s blocked, what’s next</li></ul><p>This isn’t about being lazy. It’s about freeing your brain for the work that actually requires human judgment — coaching, strategy, cross-team alignment. The administrative overhead that used to eat half your week can shrink dramatically.</p><p>Every hour you save on bureaucracy is an hour you can spend making your team better.</p><h3>3. Give Your Team Space to Learn — Then Make It an Expectation</h3><p>AI adoption isn’t optional anymore. But people learn at different paces, and the transition can be genuinely disorienting.</p><p>The best approach I’ve seen combines patience with clarity:</p><p><strong>First, create space.</strong> Carve out time for experimentation. Let people try different tools, find workflows that match their style. Some engineers will thrive with Claude Code’s terminal-first approach; others will prefer Cursor’s IDE integration. That’s fine.</p><p><strong>Then, set expectations.</strong> After a reasonable ramp period, AI-assisted coding should be the norm, not the exception. This isn’t about mandating specific tools — it’s about the outcome. Engineers who refuse to adopt AI assistance will increasingly struggle to keep pace.</p><p>At Storyblocks, when we introduced new technologies (e.g., Node.js, React), we always paired learning time with clear expectations about eventual adoption. The same principle applies here, just with higher stakes.</p><h3>4. Encourage Velocity — But Don’t Reward Tokenmaxing</h3><p>AI tools make it trivially easy to generate massive amounts of code. That’s a feature and a bug.</p><p>I’ve seen engineers fall into what I call “tokenmaxing” — measuring their productivity by tokens consumed rather than problems solved. It’s the AI equivalent of typing faster instead of thinking better.</p><p>The goal isn’t maximum output. It’s maximum <em>impact</em>.</p><p>The best AI-assisted engineers I work with use the speed gains to:</p><ul><li>Explore more solution options before committing</li><li>Write more comprehensive tests</li><li>Refactor ruthlessly instead of leaving tech debt “for later”</li><li>Spend more time understanding the problem before jumping to code</li></ul><p>As a manager, what you reward shapes behavior. Celebrate thoughtful, well-architected solutions — not the biggest PRs. Ask “what problem did this solve?” not “how many lines did you ship?”</p><h3>5. Integrate Automated Code Review Tools</h3><p>Here’s the reality: AI-assisted coding produces more code, faster. Your review processes need to scale accordingly.</p><p>At Datadog, we’re seeing PRs that would have taken a week now landing in a day or two. That’s great for velocity — but it creates a review bottleneck if humans are the only line of defense.</p><p>Automated code review tools (Codex Review, Greptile, CodeRabbit, Codium) can help by:</p><ul><li>Catching obvious issues before human reviewers even look</li><li>Flagging patterns that might indicate AI-generated code gone wrong</li><li>Providing consistent baseline feedback on style and best practices</li><li>Freeing human reviewers to focus on architecture, design, and edge cases</li></ul><p>This isn’t about replacing human review — it’s about making it sustainable. When your team is shipping 3x the code, you need 3x the review capacity. Automation is the only realistic path.</p><h3>The Bottom Line</h3><p>The AI transformation isn’t coming — it’s here. Engineers who embrace it are already pulling ahead. Teams that adapt their processes are shipping faster than ever.</p><p>As a manager, your job is to lead that transformation:</p><ol><li>Use the tools yourself so you can lead with credibility</li><li>Apply AI to your own work to free up time for what matters</li><li>Give your team room to learn, then hold them to the new standard</li><li>Reward impact, not output</li><li>Scale your review processes to match your new velocity</li></ol><p>The managers who figure this out will build the best teams of the next decade. The ones who don’t will wonder why they can’t keep up.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2b0ecb739b22" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/5-management-tips-in-the-age-of-ai-2b0ecb739b22">5 Management Tips in the Age of AI</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Inside the Agent Harness: How Codex and Claude Code Actually Work]]></title>
            <link>https://medium.com/jonathans-musings/inside-the-agent-harness-how-codex-and-claude-code-actually-work-63593e26c176?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/63593e26c176</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Wed, 22 Apr 2026 23:04:46 GMT</pubDate>
            <atom:updated>2026-04-22T23:04:46.884Z</atom:updated>
            <content:encoded><![CDATA[<h4><em>A deep technical dive into how CLI coding agents structure their conversations, manage context, and orchestrate tool calls.</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xCmpKL7GdnxGGLul0UIbyw.png" /></figure><p>If you’ve used Claude Code or OpenAI’s Codex CLI, you’ve experienced the magic: type a request, watch the agent think, and see it execute shell commands, edit files, and solve complex problems. But what’s actually happening under the hood?</p><p>I spent time analyzing the <a href="https://github.com/openai/codex">Codex CLI codebase</a> (which OpenAI open-sourced) to understand exactly how these agent harnesses work. The details are fascinating — and very different from what most people imagine.</p><h3>The Core Loop: It’s Simpler Than You Think</h3><p>At its heart, every coding agent runs a surprisingly simple loop. Here’s the pseudocode from Codex’s turn.rs:</p><pre>while needs_follow_up:<br>    1. Gather conversation history<br>    2. Send to LLM with tools<br>    3. Process response:<br>       - If tool calls → execute them, add results to history, continue<br>       - If just text → done with this turn</pre><p>That’s it. The “agentic” behavior emerges from this loop running until the model decides it’s done. There’s no complex planning system, no separate “reasoning engine” — just repeated calls to the same LLM with an accumulating context.</p><h3>What Actually Gets Sent to the Model</h3><p>This is where it gets interesting. The agent harness constructs a ResponsesApiRequest with several key components:</p><h3>1. System Instructions (Base + User)</h3><p>Codex builds layered instructions:</p><ul><li><strong>Base instructions:</strong> Model-specific guidance (the “personality”)</li><li><strong>User instructions:</strong> Wrapped in &lt;user_instructions&gt; tags</li><li><strong>Skills instructions:</strong> Dynamic guidance based on detected needs</li><li><strong>App/plugin instructions:</strong> Context from connected tools</li></ul><p>These get concatenated into the instructions field of the API request. The layering is deliberate — it lets the agent inject context-specific guidance without polluting the base prompt.</p><h3>2. Conversation History (The Input Array)</h3><p>The input field contains the full conversation transcript as ResponseItem objects:</p><ul><li>User messages</li><li>Assistant messages (previous model outputs)</li><li>Function calls (tool invocations)</li><li>Function call outputs (tool results)</li></ul><p>Critically, the harness doesn’t just store text — it preserves the <em>structure</em>. A shell command and its output are linked by call_id, so the model understands the causal relationship.</p><h3>3. Tool Definitions</h3><p>The tools array contains JSON schemas for each available tool. Here&#39;s what Codex&#39;s shell tool looks like:</p><pre>{<br>  &quot;type&quot;: &quot;function&quot;,<br>  &quot;name&quot;: &quot;shell&quot;,<br>  &quot;description&quot;: &quot;Run a shell command&quot;,<br>  &quot;strict&quot;: false,<br>  &quot;parameters&quot;: {<br>    &quot;type&quot;: &quot;object&quot;,<br>    &quot;properties&quot;: {<br>      &quot;command&quot;: {<br>        &quot;type&quot;: &quot;array&quot;,<br>        &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; },<br>        &quot;description&quot;: &quot;The command to execute&quot;<br>      },<br>      &quot;workdir&quot;: {<br>        &quot;type&quot;: &quot;string&quot;,<br>        &quot;description&quot;: &quot;Working directory&quot;<br>      },<br>      &quot;timeout_ms&quot;: {<br>        &quot;type&quot;: &quot;number&quot;,<br>        &quot;description&quot;: &quot;Timeout in milliseconds&quot;<br>      }<br>    },<br>    &quot;required&quot;: [&quot;command&quot;]<br>  }<br>}</pre><p>The harness dynamically adjusts which tools are available based on permissions, sandbox mode, and detected context (e.g., adding view_image only when images are present).</p><h3>The Magic of Tool Call Execution</h3><p>When the model returns a tool call, the harness has to:</p><ol><li><strong>Parse the arguments:</strong> The model returns JSON arguments that must be validated against the schema</li><li><strong>Check permissions:</strong> Does this command require user approval? Is it in the sandbox allowlist?</li><li><strong>Execute in sandbox:</strong> On macOS, commands run under sandbox-exec (Seatbelt). On Linux, Landlock. Windows has its own sandbox.</li><li><strong>Capture output:</strong> stdout, stderr, exit code, and timing</li><li><strong>Truncate if needed:</strong> Long outputs get truncated with head/tail preservation</li><li><strong>Format for model:</strong> The output is structured so the model can understand success/failure</li></ol><p>The truncation logic is particularly clever. Codex uses token-aware truncation that preserves the beginning and end of output while eliding the middle:</p><pre>Exit code: 0<br>Wall time: 1.23 seconds<br>Total output lines: 5000<br>Output:<br>[first 100 lines...]<br>... (4800 lines omitted) ...<br>[last 100 lines...]</pre><h3>Context Management: The Unsung Hero</h3><p>Context management is where agent harnesses earn their keep. The ContextManager in Codex handles:</p><h3>Token Counting and Limits</h3><p>The harness estimates token counts for every message using byte-based heuristics (roughly 4 characters per token). When approaching the model’s context limit, it triggers compaction.</p><h3>Auto-Compaction</h3><p>When context gets too long, Codex calls the model with a special “summarize this conversation” prompt. The summary replaces the old history, preserving the essential context while freeing tokens. This happens mid-turn if needed — the user never sees the interruption.</p><h3>Context Diffing</h3><p>Codex tracks a “reference context” and only sends <em>changes</em> when possible. If nothing significant changed between turns, it doesn’t re-inject the full context. This saves tokens and improves cache hit rates.</p><h3>The Responses API: Built for Agents</h3><p>OpenAI’s Responses API (used by Codex) has features specifically designed for agentic use:</p><ul><li><strong>parallel_tool_calls:</strong> The model can request multiple tool executions at once</li><li><strong>tool_choice:</strong> Can be &quot;auto&quot;, &quot;required&quot;, or a specific tool name</li><li><strong>reasoning:</strong> Controls extended thinking (effort: &quot;low&quot; | &quot;medium&quot; | &quot;high&quot;)</li><li><strong>store:</strong> Whether to persist the conversation for later retrieval</li><li><strong>prompt_cache_key:</strong> Enables KV-cache sharing across requests</li></ul><p>The streaming response returns structured events: OutputItemDone, ToolCallInputDelta, ReasoningContentDelta, etc. The harness parses these to update the UI in real-time and detect when tool execution is needed.</p><h3>Parallel Tool Execution</h3><p>When the model requests multiple tools simultaneously, the harness has decisions to make:</p><ol><li><strong>Dependency analysis:</strong> Can these truly run in parallel, or does one depend on another’s output?</li><li><strong>Resource constraints:</strong> How many concurrent processes can we spawn?</li><li><strong>Approval batching:</strong> Should we ask the user to approve all at once, or one at a time?</li></ol><p>Codex uses a FuturesOrdered collection to run independent tool calls concurrently while maintaining result order. The outputs get collected and sent back to the model in a single follow-up request.</p><h3>The Approval System</h3><p>Safety is non-negotiable in a tool that can execute arbitrary commands. Codex implements a layered approval system:</p><ul><li><strong>Safe commands:</strong> ls, cat, git status — auto-approved</li><li><strong>Pattern-matched:</strong> Commands matching configured allowlists</li><li><strong>Sandbox violations:</strong> Network access, file writes outside workspace — require explicit approval</li><li><strong>Granular policies:</strong> “Trust file writes but prompt for network”</li></ul><p>The Guardian module intercepts tool calls before execution, evaluates them against the policy, and either proceeds, prompts the user, or blocks entirely.</p><h3>Sub-Agents and Multi-Agent Coordination</h3><p>Codex supports spawning sub-agents for parallel work. The parent agent can:</p><ul><li><strong>spawn_agent:</strong> Create a new agent instance with a specific task</li><li><strong>wait_agent:</strong> Block until a spawned agent completes</li><li><strong>send_message:</strong> Communicate with a running sub-agent</li><li><strong>close_agent:</strong> Terminate a sub-agent</li></ul><p>Each sub-agent maintains its own context and tool execution sandbox. The parent receives structured status updates and can coordinate complex multi-step workflows.</p><h3>MCP: The Protocol Layer</h3><p>Codex supports the Model Context Protocol (MCP) for external tool integration. MCP servers expose tools that the harness can discover and invoke:</p><pre>mcp_tools = await mcp_connection_manager.list_all_tools()<br>for tool in mcp_tools:<br>    tool_spec = mcp_tool_to_responses_api_tool(tool)<br>    available_tools.append(tool_spec)</pre><p>This enables plugins like database connectors, API wrappers, and custom enterprise tools — all without modifying the core agent.</p><h3>What This Means for Agent Development</h3><p>After studying Codex’s architecture, a few things stand out:</p><ol><li><strong>The loop is trivial; the infrastructure is everything.</strong> Building an agent is 5% “call the model in a loop” and 95% context management, tool execution, sandboxing, and error handling.</li><li><strong>Token efficiency matters enormously.</strong> Without intelligent truncation and compaction, agents hit context limits after a few commands. The difference between a toy demo and a production agent is in these details.</li><li><strong>Structured tool outputs are critical.</strong> The model needs to understand <em>what happened</em>. Raw stdout isn’t enough — you need exit codes, timing, truncation indicators, and clear success/failure signals.</li><li><strong>Safety is table stakes.</strong> Any agent that can execute shell commands needs approval flows, sandboxing, and audit logging. Codex’s layered approach (Guardian → sandbox → policy) is a good template.</li><li><strong>The API contract matters.</strong> OpenAI’s Responses API was clearly designed with agents in mind. Features like parallel_tool_calls, structured streaming events, and prompt_cache_key only make sense in an agentic context.</li></ol><h3>Looking Forward</h3><p>Agent harnesses like Codex and Claude Code are still early. The architectures are converging on similar patterns — the loop, the context manager, the tool registry, the approval system. It’s exciting to see where they’ll go!</p><p><em>This post is based on analysis of the </em><a href="https://github.com/openai/codex"><em>Codex CLI source code</em></a><em>. If you’re building agents, the codebase is worth studying — it’s well-structured Rust with comprehensive tests and clear architectural separation.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=63593e26c176" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/inside-the-agent-harness-how-codex-and-claude-code-actually-work-63593e26c176">Inside the Agent Harness: How Codex and Claude Code Actually Work</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AI Engineering Is Exhilarating, Even a Year Later]]></title>
            <link>https://medium.com/jonathans-musings/ai-engineering-is-exhilarating-even-a-year-later-ff9e37e75979?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/ff9e37e75979</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Sat, 18 Apr 2026 21:59:01 GMT</pubDate>
            <atom:updated>2026-04-18T21:59:01.152Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zgjaQcmSPGHOcPwBmTuSHQ.png" /></figure><p>I’ve been coding since middle school — nearly 30 years now. I’ve loved it for most of that time. The puzzle-solving, the craft of building something from nothing, the satisfaction of watching code come alive. But I’ll be honest: somewhere in the last decade, some of the magic had faded. Not gone, just… muted.</p><p>Then, about a year ago, everything changed.</p><h3>The Beginning</h3><p>Around April 2025, I started using agent mode in Cursor. It was immediately different from anything I’d experienced before. This wasn’t autocomplete. This wasn’t a smarter Stack Overflow. This was a collaborator — one that could hold context, reason through problems, and execute across files.</p><p>I was hooked.</p><p>By June, I’d picked up Claude Code, and the experience leveled up again. I wrote extensively about what I was learning, the workflows I was developing, the productivity gains I was seeing. I figured the novelty would wear off eventually. It always does, right?</p><p>It hasn’t.</p><h3>Still Exhilarating</h3><p>Here I am, over a year later, and the thrill hasn’t faded. If anything, it’s intensified. I’ve gotten better at prompting, better at structuring problems for AI collaboration, better at knowing when to let Claude run and when to step in. The ceiling keeps rising.</p><p>What surprises me most is how the <em>rest</em> of my workday feels now. The parts where I’m not using Claude Code? They feel dry. A little boring. Like I’m typing with gloves on.</p><p>I know that sounds dramatic. But after experiencing what it’s like to move at AI-assisted speed — to have a thought and watch it materialize into working code in minutes — going back to manual everything else feels like switching from a sports car to a bicycle. The bicycle still works. It’s just… slower.</p><h3>A Friday Night Anecdote</h3><p>Yesterday was a perfect example. I’d just posted a final PR for a small project. No clear next tasks on the board. I should have been satisfied — wrapping things up on a Friday is the dream, right?</p><p>Instead, I was disappointed.</p><p>Then, around 5:15pm, a Slack message came in. Something to investigate. By 6pm, I’d checked out the issue and remembered a related task I could tackle — one that touched multiple repos and services.</p><p>I spun up two Claude Code sessions in parallel, one for each repo. For the next 30 minutes, I was in flow. Exploring the codebase, discussing approaches with Claude, making changes. When I finally pushed the commit, it was maybe 10 lines of actual code changes.</p><p>But those 30 minutes? On a Friday night? They were genuinely fun.</p><p>That’s the part that still amazes me. This isn’t just productive. It’s <em>enjoyable</em>. I’ve rediscovered something I thought I’d lost — the pure joy of coding.</p><h3>The Centaur Phase</h3><p>I’ve written before about AI’s impact on jobs. I don’t have my head in the sand — this technology is going to reshape our industry in profound ways. Some roles will change. Some will disappear.</p><p>But right now, in this moment, I’m experiencing something special: the centaur phase. Half human, half machine. AI isn’t replacing me; it’s amplifying me. It’s like wearing an Iron Man suit for software engineering.</p><p>I still make the decisions. I still architect the systems. I still review the code and catch the edge cases Claude misses. But the execution? The boilerplate? The tedious parts? Those happen at superhuman speed.</p><p>And it’s <em>so. much. fun.</em></p><h3>What This Means</h3><p>If you’re a developer and you haven’t deeply explored AI-assisted coding yet, you’re missing out. Not just on productivity gains — though those are real — but on the joy of it. There’s something magical about pair programming with an AI that never gets tired, never judges your questions, and can context-switch across your entire codebase in seconds.</p><p>After nearly 30 years of coding, I didn’t expect to feel like a beginner again. That sense of wonder, of “I can’t believe this is possible.” But here I am, a year into the AI engineering era, and I’m still waking up excited to code.</p><p>That’s not nothing.</p><p>That’s everything.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ff9e37e75979" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/ai-engineering-is-exhilarating-even-a-year-later-ff9e37e75979">AI Engineering Is Exhilarating, Even a Year Later</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Economics of AI Employees]]></title>
            <link>https://medium.com/jonathans-musings/the-economics-of-ai-employees-b3704d6dc4c1?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/b3704d6dc4c1</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Fri, 17 Apr 2026 00:34:48 GMT</pubDate>
            <atom:updated>2026-04-17T00:34:48.310Z</atom:updated>
            <content:encoded><![CDATA[<h4>Why we’ll likely have fewer AI knowledge workers than current human knowledge workers.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MFXJv6eU4qa8UpoC4axw7g.png" /></figure><p>In March, I wrote about <a href="https://medium.com/jonathans-musings/the-exonomics-of-ai-driven-software-development-70665b979496">the economics of AI-driven software development</a> — how the marginal cost of code has plummeted while developer productivity has soared. The numbers were compelling: AI adds less than 10% to development costs while potentially doubling or quadrupling output.</p><p>But there’s a follow-on question I’ve been wrestling with: what happens when the AI isn’t just <em>assisting</em> a human — but <em>replacing</em> one?</p><p>The answer surprised me. The economics of AI employees don’t scale the way you’d expect.</p><h3>My AI Journey</h3><p>I’ve been using AI coding assistants since 2024, starting with Cursor. In June 2025, I picked up Claude Code and started shipping at ~300 lines per hour. By early 2026, I’d set up <a href="https://medium.com/jonathans-musings/my-first-three-days-with-clawdbot-now-moltbot-18835f351903">Clawdbot</a> (now OpenClaw) — an AI agent that runs on my machine, connects to WhatsApp, and handles tasks autonomously.</p><p>As I wrote in <a href="https://medium.com/jonathans-musings/the-path-towards-agi-now-seems-possible-afb7bd2bd698">“The Path Towards AGI Now Seems Possible”</a>, this felt like a step change. I message my agent from my phone while walking the dog, and there’s a working feature to test when I get back. Sub-agents work in the background. It remembers context across sessions.</p><p>But here’s the thing: I run my Clawdbot on Anthropic’s Claude Opus 4.5. And I recently got a visceral lesson in what AI employees actually cost.</p><h3>The $200 Wake-Up Call</h3><p>Anthropic recently changed their policies — subscription plans can no longer be used for Opus 4.5 API access. I’m now paying API rates directly.</p><p>Over the past two weeks, I’ve spent roughly $200 on my Clawdbot. And here’s the kicker: <strong>I don’t even use it that heavily</strong>. It checks my email on a cron job a few times a day. I use it for occasional writing and research. Maybe an hour or two of actual interaction per week.</p><p>$200 for a mostly-idle assistant.</p><p>That got me thinking: what would it cost to run an AI employee that actually works full-time?</p><h3>The Math: AI Employees Are Expensive</h3><p>Let’s estimate the cost of running Claude Opus 4.7 (the latest flagship model) for continuous, demanding work — the kind of work you’d expect from a full-time knowledge worker.</p><p>The key variables:</p><ul><li><strong>Context maintenance:</strong> Complex work requires large context windows — often 100K+ tokens of project state, documentation, and history</li><li><strong>Output volume:</strong> A working AI generates substantial output — code, documents, analysis, communications</li><li><strong>Iteration cycles:</strong> Real work involves back-and-forth, debugging, refinement — not single-shot responses</li></ul><p>Based on current Opus 4.7 pricing and realistic usage patterns for sustained cognitive work, a conservative estimate lands at <strong>$1,000 or more per day</strong> of continuous operation.</p><p>Do the math: $1,000/day × 365 days = <strong>$365,000 per year</strong>.</p><p>And that’s just API costs. It doesn’t include the infrastructure to run the agent, the engineering time to build and maintain integrations, or the human oversight still required for anything consequential.</p><h3>The Human Benchmark</h3><p>According to research aggregating BLS, OECD, and industry data, the average U.S. knowledge worker earns <strong>$100,000–$110,000 per year</strong> in total compensation (salary plus benefits). There are approximately 100 million knowledge workers in the United States, generating $10–11 trillion in annual compensation.</p><p>So we have:</p><ul><li><strong>AI employee (Opus 4.7, full-time):</strong> $365,000+/year in API costs alone</li><li><strong>Human knowledge worker:</strong> ~$105,000/year in total compensation</li></ul><p>An AI employee costs <strong>3.5x more than a human</strong> just in compute — before you account for anything else.</p><p>Even if you use a cheaper model like Sonnet with aggressive prompt caching, you’re still looking at $50,000–$100,000/year for continuous operation. That’s comparable to a human salary, not dramatically cheaper.</p><h3>The Diminishing Returns Problem</h3><p>But wait — doesn’t AI produce more output? Isn’t a 3.5x cost justified if you get 10x the productivity?</p><p>Here’s where the economics get uncomfortable: <strong>10x output doesn’t equal 10x value</strong>.</p><p>This is the fundamental issue with knowledge work that we rarely discuss. Most knowledge work has sharply diminishing marginal returns:</p><ul><li><strong>Writing:</strong> The first draft captures most of the value. The 10th revision adds marginal improvement.</li><li><strong>Code:</strong> The working feature is what matters. Additional polish has declining impact.</li><li><strong>Analysis:</strong> The key insight is worth everything. Additional charts are decoration.</li><li><strong>Research:</strong> After finding the answer, continued research is wheel-spinning.</li></ul><p>There’s a ceiling on how much knowledge work the world needs. We can only absorb so much code, so many reports, so many analyses. The bottleneck isn’t production — it’s consumption and implementation.</p><p>Consider healthcare: there are only so many people with cancer who need treatment plans. There are only so many patients a hospital can serve. Producing 10x more treatment plans doesn’t help 10x more patients — it just creates a backlog.</p><p>Or consider law: you can generate infinite contracts and briefs, but there are only so many deals to close and cases to argue.</p><p>Or software: you can write infinite features, but users can only learn and adopt so many.</p><p>The value of knowledge work is <strong>bounded by the real-world problems it solves</strong>, not by the volume of output it produces.</p><h3>The Counterintuitive Conclusion</h3><p>Put these two factors together — expensive compute and diminishing returns — and you reach a surprising conclusion:</p><p><strong>We’re likely to replace human knowledge workers with a smaller number of AI employees in the near term, not more.</strong></p><p>The economics just don’t work for most use cases. An AI that costs $365,000/year needs to deliver massive value to justify itself. Very few tasks meet that bar when you account for diminishing returns.</p><p>What does work economically:</p><ul><li><strong>AI assistants</strong> that amplify human productivity (my current model — burst usage, not continuous)</li><li><strong>Specialized AI agents</strong> for high-value, time-sensitive tasks (trading, security monitoring)</li><li><strong>AI in the loop</strong> for human decisions, not replacing them</li></ul><p>What doesn’t work:</p><ul><li><strong>Equal numbers of full-time AI employees</strong> doing general knowledge work at current API prices</li><li><strong>AI armies</strong> producing massive volumes of output no one will consume</li><li><strong>AI replacing</strong> $100K workers when it costs $365K</li></ul><h3>The Long-Term View</h3><p>This analysis assumes current pricing. API costs will fall — they always do. Moore’s Law for inference is real.</p><p>But even as compute gets cheaper, the diminishing returns problem remains. The world doesn’t need infinite knowledge work. There’s a carrying capacity for analysis, for code, for content.</p><p>The likely equilibrium isn’t the same number of AI employees as humans today but rather fewer AI employees maybe doubling or tripling current output.</p><h3>The Bottom Line</h3><p>I love my Clawdbot. It’s genuinely useful. But I don’t use it as an employee — I use it as a force multiplier for my own time.</p><p>The lesson from my $200 two-week experiment: AI employees are expensive, and the value of knowledge work has natural limits. The economics will favor AI employees taking over but there will ironically be fewer of them than there are human knowledge workers today.</p><p><em>Jonathan Fulton is a Staff Software Engineer at Datadog, building experimentation infrastructure. He writes about AI-assisted development, architecture, and the business of software at </em><a href="https://medium.com/jonathans-musings"><em>Jonathan’s Musings</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b3704d6dc4c1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/the-economics-of-ai-employees-b3704d6dc4c1">The Economics of AI Employees</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How Managers Accidentally Create Stress for Their Best People]]></title>
            <link>https://medium.com/jonathans-musings/how-managers-accidentally-create-stress-for-their-best-people-815135d87b01?source=rss-d05e0fdb8e4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/815135d87b01</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Jonathan Fulton]]></dc:creator>
            <pubDate>Thu, 16 Apr 2026 00:21:05 GMT</pubDate>
            <atom:updated>2026-04-16T00:21:05.821Z</atom:updated>
            <content:encoded><![CDATA[<h4><em>The small habits that slowly erode trust, focus, and psychological safety</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z02rYUcgx9jjFHyRWNaGrw.png" /></figure><p>I’ve spent the last 15 years on both sides of the management divide. As SVP at Storyblocks, VP of Engineering at Foundry.ai, a manager at ID.me, and interim Head of Engineering at Eppo, I’ve made every mistake in this article. As an architect at ID.me and a Staff Engineer at Eppo and now Datadog, I’ve been on the receiving end of some of these same mistakes.</p><p>Here’s the uncomfortable truth: <strong>the managers causing the most stress aren’t bad people</strong>. They’re often high performers themselves — busy, well-intentioned, and completely unaware of the anxiety ripples created by their small, daily habits.</p><p>This post is for them. And honestly, it’s for me too — a reminder of the patterns I need to keep catching in myself.</p><h3>1. The Unannounced 1-on-1</h3><p>“Hey, do you have 15 minutes to chat?” Or maybe a 1-on-1 meeting invite just pops up on the calendar.</p><p>For managers operating on a manager schedule, this feels like nothing. You have context. You know you just want to ask about that API design, or get their opinion on a reorg, or maybe even deliver good news about a promotion.</p><p>For your IC, those words trigger an immediate cortisol spike. <strong>Everyone thinks they’re getting fired.</strong> I don’t care how secure they are, how much you’ve praised them, or how obvious it should be that they’re your best performer. The moment you schedule an ad-hoc meeting with no topic, their brain starts writing the termination script.</p><p><strong>The fix:</strong> Add one sentence of context. “Quick sync on the Q3 roadmap.” “Want to get your take on team structure.” “Good news to share.” Three seconds of typing saves hours of spiraling.</p><h3>2. The Phantom Meeting Change</h3><p>Paul Graham’s famous essay on the <a href="http://www.paulgraham.com/makersschedule.html">Maker’s Schedule vs. Manager’s Schedule</a> should be required reading for every engineering leader. Here’s the core insight: for managers, the calendar is a tool. For makers, the calendar is a constraint.</p><p>When you move a meeting without explanation, you’ve just blown up someone’s carefully constructed focus block. They’d mentally allocated that morning for deep work, knowing the 2pm 1-on-1 was coming. When you shift it to 11am, you didn’t just move a meeting — you fragmented their most productive hours.</p><p>Worse is the deleted meeting with no communication. Did you cancel because something came up? Because you’re frustrated with them? Because the meeting isn’t important? They don’t know. So they fill in the blanks with anxiety.</p><p><strong>The fix:</strong> Treat calendar changes as requests, not commands. “Hey, I need to move our 1-on-1 — does 11am work or should we push to tomorrow?” Two sentences. Massive reduction in cognitive overhead.</p><h3>3. The Public Praise That Excludes</h3><p>This one is subtle, and I’ve watched it happen countless times.</p><p>A manager sends a message to the team channel: “Huge shoutout to Alice and Bob for crushing the migration this week!” Meanwhile, Carol — who spent three days debugging the gnarliest edge cases — is conspicuously absent from the praise.</p><p>Public recognition is powerful. But <strong>public recognition that leaves someone out sends a message too</strong>. Even if Carol knows she contributed, the absence of her name in front of the whole team feels like a verdict. Did the manager not notice? Does the manager not value debugging work? Is Carol on thin ice?</p><p>The same applies to surprise feedback. Even positive feedback delivered unexpectedly in a group setting can feel like an ambush. Some people process publicly; others need space. Springing it on them doesn’t give them that choice.</p><p><strong>The fix:</strong> Default to private praise with an offer to make it public. “I wanted to thank you for the work on the migration — would you be comfortable if I called it out in standup?” And when you do public recognition, take the extra two minutes to make sure you’re not accidentally leaving someone out.</p><h3>4. Urgency Without Context</h3><p>“I need this by end of day.”</p><p>Cool, but why? Is there a customer commitment? A board meeting? A demo? Or do you just want it off your plate?</p><p>Context isn’t just nice to have — it’s the difference between <em>I’m part of a team solving a real problem</em> and <em>I’m a cog responding to arbitrary pressure</em>. Your best people want to help. They’ll move mountains for legitimate urgency. But when everything is urgent and nothing is explained, two things happen:</p><ol><li>They stop believing any urgency is real</li><li>They start to resent being treated like an executor instead of a partner</li></ol><p><strong>The fix:</strong> Share the why. Own the urgency. “The CEO is demoing this to a key prospect tomorrow — I know it’s tight, but here’s why it matters.” If you can’t articulate a real reason, maybe it’s not actually urgent.</p><h3>5. Mistaking Silence for Alignment</h3><p>You present a plan. The room is quiet. No objections. Ship it.</p><p>Except silence rarely means agreement. It often means:</p><ul><li>People are still processing</li><li>They don’t feel safe disagreeing with the manager</li><li>They don’t want to criticize colleagues in public</li><li>They’re exhausted and picking their battles</li><li>They assume someone else will speak up</li></ul><p>As a Staff Engineer, I’ve sat in many meetings where I disagreed with something but didn’t speak up — because the political cost felt too high, or because I knew the manager had already decided. That’s not alignment. That’s resignation.</p><p><strong>The fix:</strong> Explicitly invite dissent. “What am I missing?” “What would make this fail?” Even better: create async space for feedback. “I’m going to let this sit for 24 hours — DM me or comment in the doc if you see issues.” You’ll be amazed what surfaces when people don’t have to object in real-time in front of their peers.</p><h3>6. The Promised Follow-Up That Never Comes</h3><p>This is death by a thousand cuts.</p><p>“I’ll get back to you on the promotion timeline.”<br>“Let me check with leadership and circle back.”<br>“Good question — I’ll find out.”</p><p>And then… nothing. The manager moved on. The IC didn’t.</p><p>For your direct report, that open loop is still spinning. They’re wondering if you forgot, if the answer is bad news you’re avoiding, or if their question just didn’t matter enough to follow up on. Each dropped thread is a small erosion of trust.</p><p><strong>The fix:</strong> Track your promises like you track your tasks. If you can’t follow up, close the loop anyway. “I looked into this and don’t have an answer yet — I haven’t forgotten, just still working on it.” Even uncertainty, communicated, is better than silence.</p><h3>The Common Thread</h3><p>Every pattern here shares the same root cause: <strong>managers forget what it’s like to not have context</strong>.</p><p>You know why you scheduled the meeting. You know the meeting move was benign. You know the urgency is real. You know who did what on the project. You know you meant to follow up.</p><p>Your team doesn’t. They only see the action. And in the absence of context, humans fill in gaps with anxiety.</p><p>The good news? These are all fixable with small, cheap interventions. A sentence of context. A question instead of a command. A closed loop instead of silence. None of this requires management training or leadership coaching. It just requires remembering that your team doesn’t have the same information you do — and deciding to share it.</p><p>Your best people won’t tell you this is happening. They’ll just slowly disengage, or burn out, or leave. The stress you accidentally create compounds invisibly until it doesn’t.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=815135d87b01" width="1" height="1" alt=""><hr><p><a href="https://medium.com/jonathans-musings/how-managers-accidentally-create-stress-for-their-best-people-815135d87b01">How Managers Accidentally Create Stress for Their Best People</a> was originally published in <a href="https://medium.com/jonathans-musings">Jonathan’s Musings</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>