<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Robin Singh</title>
    <description>The latest articles on DEV Community by Robin Singh (@robin_singh_456fbe1f602b9).</description>
    <link>https://dev.to/robin_singh_456fbe1f602b9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4140191%2Fb6df0017-4c6f-43d0-963b-10f07ce25675.png</url>
      <title>DEV Community: Robin Singh</title>
      <link>https://dev.to/robin_singh_456fbe1f602b9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robin_singh_456fbe1f602b9"/>
    <language>en</language>
    <item>
      <title>Why Smarter AI Doesn't Mean Smarter Robots (Yet)</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Tue, 13 Oct 2026 22:40:01 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/why-smarter-ai-doesnt-mean-smarter-robots-yet-1ebm</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/why-smarter-ai-doesnt-mean-smarter-robots-yet-1ebm</guid>
      <description>&lt;p&gt;Robots and AI are often talked about as if they are the same project, but they are not. The AI research that gets headlines (big vision models, reinforcement learning, large language models) mostly runs in simulation or in a data center. The robot has to deal with gravity, friction, battery drain and the fact that a dropped object does not generate a loss function. This post looks at where the two fields actually meet today, what each AI technique contributes to a physical machine, and where the real bottlenecks are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI Actually Touches a Robot
&lt;/h2&gt;

&lt;p&gt;A robot's software stack usually has three layers: perception, planning, and control. AI has made real progress in the first two. Control, the part that turns a plan into motor commands, is still mostly classical: PID loops, model predictive control, inverse kinematics. The AI work sits on top of that layer, not inside it.&lt;/p&gt;

&lt;p&gt;That split explains why a robot can have a strong vision model and still fail to pick up a cup. The model tells it where the cup is. It does not tell the motors how much force to apply before the cup slips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vision Models: Seeing Before Moving
&lt;/h2&gt;

&lt;p&gt;Vision is the most mature AI contribution to robotics. Object detection and segmentation models let a robot find items on a shelf, identify a surgical landmark, or track a package on a conveyor. Depth estimation, often from stereo cameras or LIDAR fused with a learned model, gives the robot a 3D sense of its surroundings instead of a flat image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# simplified perception loop
&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;detections&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vision_model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;detections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;depth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;depth_estimator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;estimate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;world_pose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;camera_to_world&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;planner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_target&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;world_pose&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This loop runs several times a second on a real robot. The model's job ends at producing a pose. Everything after that, approaching the object and gripping it with the right force, is a separate problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reinforcement Learning: Learning to Move
&lt;/h2&gt;

&lt;p&gt;Reinforcement learning (RL) trains a lot of locomotion and manipulation policies. Instead of hand coding a walking gait, you simulate the robot thousands or millions of times, reward it for staying upright and moving forward, and let the policy emerge.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# simplified RL training loop
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;episode&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_episodes&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;next_state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;next_state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;next_state&lt;/span&gt;
    &lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boston Dynamics' Atlas and Tesla's Optimus both lean on this kind of training for balance and recovery. Sim-to-real transfer is the hard part: a policy that works in simulation often needs real-world fine-tuning because friction, motor backlash and sensor noise never match the simulator exactly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Humanoid and Mobile Robots in Production Today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Warehouse and logistics&lt;/strong&gt;: Amazon's fleet of mobile robots moves shelves and packages across fulfillment centers, guided by AI path planning that reroutes around people and obstacles in real time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanoids&lt;/strong&gt;: Figure's robots and Tesla's Optimus are being tested on tasks like sorting and simple assembly, using vision-language-action models to map a camera feed and a spoken instruction to a sequence of movements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surgical robots&lt;/strong&gt;: Intuitive Surgical's da Vinci system still relies on a human surgeon for decisions, but AI assists with instrument tracking and tissue recognition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous drones&lt;/strong&gt;: AI-driven drones now handle inspection of power lines, crop monitoring and search and rescue, using onboard vision models for obstacle avoidance where GPS is unreliable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Large Language Models Add
&lt;/h2&gt;

&lt;p&gt;LLMs are showing up in robotics as planners, not controllers. Given a high-level instruction like "clear the table," an LLM can break it into subtasks (locate objects, pick each one up, place it in a bin) that get handed to lower-level motion policies. Google's RT-2 and similar vision-language-action models go further, mapping images and text directly to robot actions. The LLM does not move a single motor; it decides what should happen next and leaves the execution to the control stack described earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Power&lt;/strong&gt;: A humanoid robot like Optimus runs for roughly 2-5 hours on a charge doing moderate work, far short of a human shift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dexterity&lt;/strong&gt;: Human hands have 27 degrees of freedom and a sense of touch that current robot grippers still cannot match, which is why most warehouse robots move boxes rather than individual items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: A capable manipulation arm with force sensing still costs tens of thousands of dollars, which keeps humanoid robots out of most workplaces for now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety&lt;/strong&gt;: A robot operating near people needs certified force limits and fail-safes, which slows down deployment far more than the AI model does.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where This Is Headed
&lt;/h2&gt;

&lt;p&gt;The next few years look less like "robots get smarter" and more like "robots get cheaper and more reliable at narrow tasks." Expect AI to keep improving perception and task planning while mechanical engineering, battery density and manufacturing cost close the gap on the physical side. The bottleneck has shifted: it used to be the software. Increasingly, it is the hardware underneath it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>robotics</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
    <item>
      <title>Dev</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Sat, 10 Oct 2026 22:40:07 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/dev-5760</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/dev-5760</guid>
      <description>&lt;p&gt;This is testing  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6wtt8bheb45hk6lwj3ts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6wtt8bheb45hk6lwj3ts.png" width="328" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>test</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Sat, 03 Oct 2026 03:31:01 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/test-111k</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/test-111k</guid>
      <description>&lt;p&gt;test&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Meet Jev: The AI That Refuses to Chat With You (On Purpose)</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Thu, 24 Sep 2026 17:42:01 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/meet-jev-the-ai-that-refuses-to-chat-with-you-on-purpose-3df5</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/meet-jev-the-ai-that-refuses-to-chat-with-you-on-purpose-3df5</guid>
      <description>&lt;p&gt;Every AI model you've heard of talks. This one was built to never say a word — and that's exactly why developers are excited about it.&lt;/p&gt;

&lt;p&gt;Here's a question you've probably never had to ask before: what if an AI model just... didn't write anything? No essays, no explanations, no friendly chatbot replies. Just a fast, confident decision, and nothing else. That's Jev — a new model from a startup called TypeSafe AI, built by someone who helped create ChatGPT itself. And the whole point of it is that it does less than ChatGPT, on purpose, so it can do that one thing much faster and much more reliably.&lt;/p&gt;

&lt;p&gt;What Jev actually does&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5n8w4ejdmoswvlcvzkce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5n8w4ejdmoswvlcvzkce.png" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think about all the tiny decisions software makes behind the scenes every day: is this email spam or not, which support queue should this ticket go to, does this comment break the community rules, how likely is this customer to churn. Right now, a lot of companies handle these by calling a full AI chatbot — the same kind of model you'd use to write an essay — just to get back a one-word answer buried inside a paragraph.&lt;/p&gt;

&lt;p&gt;Jev skips the paragraph. You give it some information and a set of possible answers, and it hands back one of those answers directly, plus a percentage telling you how confident it actually is. No essay, no chit-chat, no extra words to sift through. Just: here's the answer, and here's how sure I am.&lt;/p&gt;

&lt;p&gt;How it's different from ChatGPT, Claude, or Gemini&lt;/p&gt;

&lt;p&gt;The AI chatbots you already know are built to hold a conversation — they think through a response one word at a time, the way you might think through a sentence as you speak it. That's great for writing and explaining things, but it's slow and expensive when all you actually needed was a single yes-or-no answer.&lt;/p&gt;

&lt;p&gt;Jev works completely differently: instead of writing word by word, it produces its whole answer at once, already locked into a fixed format you defined ahead of time — like a multiple-choice answer instead of an open essay question. Because it can only ever pick from the choices you gave it, it literally can't make something up or go off-script the way a chatbot sometimes does. And because it skips the whole "write it out one word at a time" process, it's reportedly dozens of times faster and a fraction of the cost for this kind of task.&lt;/p&gt;

&lt;p&gt;The trade-off is real, though: Jev can't write you an email, a story, or a thoughtful explanation. It only knows how to choose, score, or rate — nothing more. It's not a smaller, weaker version of ChatGPT. It's a completely different tool built for a completely different job.&lt;/p&gt;

&lt;p&gt;Why this could actually matter&lt;/p&gt;

&lt;p&gt;Right now, a huge number of AI-powered products are quietly using an expensive, slow chatbot to make small, repeated decisions it was never really designed for — like using a sports car to deliver a single envelope down the street. If a purpose-built tool like Jev can genuinely do that specific job faster, cheaper, and more predictably, the likely shift isn't "Jev replaces ChatGPT." It's that apps start using both: a fast, no-nonsense decision-maker like Jev handling the constant background judgment calls, and a full conversational model like ChatGPT or Claude stepping in only when something actually needs to be written, explained, or reasoned through in depth.&lt;/p&gt;

&lt;p&gt;For everyday users, that split would mostly be invisible — you'd just notice AI-powered apps getting snappier and cheaper to run, without any drop in quality. For developers and companies, it's a meaningfully different way to think about building with AI: not "which chatbot should I use everywhere," but "which decisions actually need a conversation, and which ones just need an answer."&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>challenge</category>
    </item>
    <item>
      <title>My First Draft</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Thu, 24 Sep 2026 17:32:00 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/my-first-draft-58ec</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/my-first-draft-58ec</guid>
      <description>&lt;h2&gt;
  
  
  What is new
&lt;/h2&gt;

&lt;p&gt;[The headline change, in one or two sentences.]&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[An improvement, and who it helps]&lt;/li&gt;
&lt;li&gt;[Another improvement]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fixes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[What was broken, and what happens now]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Upgrading
&lt;/h2&gt;

&lt;p&gt;[Anything the reader has to do, or that nothing is needed.]&lt;/p&gt;

</description>
      <category>api</category>
      <category>github</category>
    </item>
    <item>
      <title>MCP Went Stateless. Your AI Agent Still Needs State.</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Thu, 24 Sep 2026 01:02:01 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/mcp-went-stateless-your-ai-agent-still-needs-state-2knj</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/mcp-went-stateless-your-ai-agent-still-needs-state-2knj</guid>
      <description>&lt;p&gt;One of the more interesting changes in the AI engineering ecosystem in 2026 is happening below the model layer.&lt;/p&gt;

&lt;p&gt;The latest MCP specification moved the protocol toward a &lt;strong&gt;stateless core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That sounds like agents should become stateless too.&lt;/p&gt;

&lt;p&gt;They shouldn’t.&lt;/p&gt;

&lt;p&gt;In fact, as AI agents become longer-running, more autonomous, and capable of executing real actions, &lt;strong&gt;application-level state becomes even more important&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The distinction is simple:&lt;/p&gt;

&lt;p&gt;MCP should not need to remember your connection.&lt;br&gt;&lt;br&gt;
Your agent absolutely needs to remember its work.&lt;/p&gt;

&lt;p&gt;This difference becomes critical once you move from demos to production.&lt;/p&gt;

&lt;p&gt;What Changed in MCP?&lt;/p&gt;

&lt;p&gt;The 2026-07-28 Model Context Protocol specification introduced a stateless protocol core.&lt;/p&gt;

&lt;p&gt;Instead of depending on persistent sessions between an MCP client and server, requests can carry enough information to be handled independently.&lt;/p&gt;

&lt;p&gt;That means an MCP request can potentially hit:&lt;/p&gt;

&lt;p&gt;Client&lt;br&gt;&lt;br&gt;
   |&lt;br&gt;&lt;br&gt;
   v&lt;br&gt;&lt;br&gt;
Load Balancer&lt;br&gt;&lt;br&gt;
   |&lt;br&gt;&lt;br&gt;
   +------&amp;gt; MCP Server 1&lt;br&gt;&lt;br&gt;
   |&lt;br&gt;&lt;br&gt;
   +------&amp;gt; MCP Server 2&lt;br&gt;&lt;br&gt;
   |&lt;br&gt;&lt;br&gt;
   +------&amp;gt; MCP Server 3  &lt;/p&gt;

&lt;p&gt;without requiring the load balancer to keep routing a particular client back to the same server instance.&lt;/p&gt;

&lt;p&gt;The new specification removed the old session-oriented initialize flow and Mcp-Session-Id, making requests more self-describing and much easier to scale using conventional HTTP infrastructure.&lt;/p&gt;

&lt;p&gt;This is a good architectural change.&lt;/p&gt;

&lt;p&gt;But there is an important trap here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stateless transport does not mean stateless workflow.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An AI Agent Is Usually a State Machine&lt;/p&gt;

&lt;p&gt;Imagine an agent responsible for refunding a customer.&lt;/p&gt;

&lt;p&gt;The workflow might look like:&lt;/p&gt;

&lt;p&gt;User asks for refund&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Agent investigates order&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Checks refund policy&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Calculates refund amount&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Requires human approval&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
      PAUSE&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
   [30 minutes]&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Human approves&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Execute refund&lt;br&gt;&lt;br&gt;
        |&lt;br&gt;&lt;br&gt;
        v&lt;br&gt;&lt;br&gt;
Notify customer  &lt;/p&gt;

&lt;p&gt;What happens during those 30 minutes?&lt;/p&gt;

&lt;p&gt;If your agent state only exists inside:&lt;/p&gt;

&lt;p&gt;agent = Agent(...)&lt;br&gt;&lt;br&gt;
result = &lt;a href="http://agent.run" rel="noopener noreferrer"&gt;agent.run&lt;/a&gt;(...)  &lt;/p&gt;

&lt;p&gt;you have a problem.&lt;/p&gt;

&lt;p&gt;The process might restart.&lt;/p&gt;

&lt;p&gt;A deployment might happen.&lt;/p&gt;

&lt;p&gt;The request could reach another Kubernetes pod.&lt;/p&gt;

&lt;p&gt;The machine could disappear.&lt;/p&gt;

&lt;p&gt;The approval request could arrive hours later.&lt;/p&gt;

&lt;p&gt;The workflow therefore cannot depend on process memory.&lt;/p&gt;

&lt;p&gt;You need durable state.&lt;/p&gt;

&lt;p&gt;The Wrong Architecture&lt;/p&gt;

&lt;p&gt;A common first implementation looks something like this:&lt;/p&gt;

&lt;p&gt;pending_runs = {}  &lt;/p&gt;

&lt;p&gt;async def execute_agent(user_id, request):&lt;br&gt;&lt;br&gt;
    result = await &lt;a href="http://agent.run" rel="noopener noreferrer"&gt;agent.run&lt;/a&gt;(request)  &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if result.requires\_approval:  
    pending\_runs\[[result.id](http://result.id)\] = result  

    return {  
        "status": "waiting\_for\_approval",  
        "run\_id": [result.id](http://result.id)  
    }  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Later:&lt;/p&gt;

&lt;p&gt;async def approve(run_id):&lt;br&gt;&lt;br&gt;
    run = pending_runs[run_id]  &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return await run.resume()  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It works perfectly...&lt;/p&gt;

&lt;p&gt;until you deploy it.&lt;/p&gt;

&lt;p&gt;Consider two instances:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         Load Balancer  
          /         \\  
         /           \\  
    Server A       Server B  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The agent runs on Server A.&lt;/p&gt;

&lt;p&gt;pending_runs["run_123"]  &lt;/p&gt;

&lt;p&gt;exists only in Server A's memory.&lt;/p&gt;

&lt;p&gt;The user clicks:&lt;/p&gt;

&lt;p&gt;Approve  &lt;/p&gt;

&lt;p&gt;The load balancer sends the request to Server B.&lt;/p&gt;

&lt;p&gt;Server B asks:&lt;/p&gt;

&lt;p&gt;pending_runs["run_123"]  &lt;/p&gt;

&lt;p&gt;and gets:&lt;/p&gt;

&lt;p&gt;KeyError  &lt;/p&gt;

&lt;p&gt;Your AI model isn't the problem.&lt;/p&gt;

&lt;p&gt;Your prompt isn't the problem.&lt;/p&gt;

&lt;p&gt;Your distributed system is.&lt;/p&gt;

&lt;p&gt;The Better Architecture&lt;/p&gt;

&lt;p&gt;Persist the workflow state.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌───────────────┐  
             │     Client    │  
             └───────┬───────┘  
                     │  
                     ▼  
             ┌───────────────┐  
             │ Load Balancer │  
             └───────┬───────┘  
                     │  
         ┌───────────┴───────────┐  
         ▼                       ▼  
   ┌───────────┐           ┌───────────┐  
   │ Server A  │           │ Server B  │  
   └─────┬─────┘           └─────┬─────┘  
         │                       │  
         └───────────┬───────────┘  
                     ▼  
           ┌─────────────────┐  
           │ Workflow State  │  
           │                 │  
           │ Postgres        │  
           │ Redis           │  
           │ Temporal        │  
           │ Durable Runtime │  
           └─────────────────┘  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now the agent runtime becomes replaceable.&lt;/p&gt;

&lt;p&gt;Any server can reconstruct the current workflow.&lt;/p&gt;

&lt;p&gt;Separate Three Different Types of State&lt;/p&gt;

&lt;p&gt;This is where production agent architecture becomes interesting.&lt;/p&gt;

&lt;p&gt;I usually think about agent state as three different layers.&lt;/p&gt;

&lt;p&gt;1. Conversation State&lt;/p&gt;

&lt;p&gt;This is what the model needs to understand the interaction.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "messages": [],&lt;br&gt;&lt;br&gt;
  "summary": "...",&lt;br&gt;&lt;br&gt;
  "user_preferences": {},&lt;br&gt;&lt;br&gt;
  "retrieved_context": []&lt;br&gt;&lt;br&gt;
}  &lt;/p&gt;

&lt;p&gt;This state controls what the model knows.&lt;/p&gt;

&lt;p&gt;2. Workflow State&lt;/p&gt;

&lt;p&gt;This is what your application needs to understand &lt;strong&gt;where execution currently is&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "workflow_id": "refund_39281",&lt;br&gt;&lt;br&gt;
  "status": "WAITING_FOR_APPROVAL",&lt;br&gt;&lt;br&gt;
  "current_step": "refund_confirmation",&lt;br&gt;&lt;br&gt;
  "order_id": "ORD_8821",&lt;br&gt;&lt;br&gt;
  "refund_amount": 149.99&lt;br&gt;&lt;br&gt;
}  &lt;/p&gt;

&lt;p&gt;This is not prompt context.&lt;/p&gt;

&lt;p&gt;It is distributed-system state.&lt;/p&gt;

&lt;p&gt;3. Side-Effect State&lt;/p&gt;

&lt;p&gt;This tells you what the agent has already done.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "email_sent": true,&lt;br&gt;&lt;br&gt;
  "refund_created": false,&lt;br&gt;&lt;br&gt;
  "crm_updated": true&lt;br&gt;&lt;br&gt;
}  &lt;/p&gt;

&lt;p&gt;Without this state, retries become dangerous.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;p&gt;Agent calls refund API  &lt;/p&gt;

&lt;p&gt;↓  &lt;/p&gt;

&lt;p&gt;Network timeout  &lt;/p&gt;

&lt;p&gt;↓  &lt;/p&gt;

&lt;p&gt;Agent doesn't know whether refund succeeded  &lt;/p&gt;

&lt;p&gt;↓  &lt;/p&gt;

&lt;p&gt;Agent retries  &lt;/p&gt;

&lt;p&gt;↓  &lt;/p&gt;

&lt;p&gt;Customer gets refunded twice  &lt;/p&gt;

&lt;p&gt;That is why production agents need &lt;strong&gt;idempotency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Idempotency Becomes Extremely Important&lt;/p&gt;

&lt;p&gt;Every side-effecting tool should ideally support something similar to:&lt;/p&gt;

&lt;p&gt;refund(&lt;br&gt;&lt;br&gt;
    order_id="ORD_8821",&lt;br&gt;&lt;br&gt;
    amount=149.99,&lt;br&gt;&lt;br&gt;
    idempotency_key="workflow_928_step_7"&lt;br&gt;&lt;br&gt;
)  &lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;Attempt 1&lt;br&gt;&lt;br&gt;
workflow_928_step_7&lt;br&gt;&lt;br&gt;
        ↓&lt;br&gt;&lt;br&gt;
Refund $149.99  &lt;/p&gt;

&lt;p&gt;If the workflow retries:&lt;/p&gt;

&lt;p&gt;Attempt 2&lt;br&gt;&lt;br&gt;
workflow_928_step_7&lt;br&gt;&lt;br&gt;
        ↓&lt;br&gt;&lt;br&gt;
Already processed&lt;br&gt;&lt;br&gt;
        ↓&lt;br&gt;&lt;br&gt;
Return existing result  &lt;/p&gt;

&lt;p&gt;instead of creating another refund.&lt;/p&gt;

&lt;p&gt;This applies to much more than payments.&lt;/p&gt;

&lt;p&gt;Think about:&lt;/p&gt;

&lt;p&gt;send_email()&lt;br&gt;&lt;br&gt;
create_ticket()&lt;br&gt;&lt;br&gt;
delete_resource()&lt;br&gt;&lt;br&gt;
publish_post()&lt;br&gt;&lt;br&gt;
update_crm()&lt;br&gt;&lt;br&gt;
book_meeting()&lt;br&gt;&lt;br&gt;
deploy_service()&lt;br&gt;&lt;br&gt;
transfer_money()  &lt;/p&gt;

&lt;p&gt;Once AI agents can perform actions, &lt;strong&gt;retry semantics become part of AI safety&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Human Approval Is Also a Distributed Systems Problem&lt;/p&gt;

&lt;p&gt;Human-in-the-loop workflows are becoming common for sensitive actions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  v&lt;br&gt;&lt;br&gt;
Draft action&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  v&lt;br&gt;&lt;br&gt;
Approval required&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  +---------- PAUSE ----------&lt;br&gt;&lt;br&gt;
                               |&lt;br&gt;&lt;br&gt;
                               |&lt;br&gt;&lt;br&gt;
                         Human approves&lt;br&gt;&lt;br&gt;
                               |&lt;br&gt;&lt;br&gt;
                               v&lt;br&gt;&lt;br&gt;
                           Resume job  &lt;/p&gt;

&lt;p&gt;The important word here is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;resume&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don't want to restart the entire agent.&lt;/p&gt;

&lt;p&gt;You want to continue from a durable checkpoint.&lt;/p&gt;

&lt;p&gt;Modern agent frameworks increasingly expose this kind of pause/resume model. OpenAI's agent documentation, for example, describes storing serialized state when human review happens later and continuing the same run once the decision arrives.&lt;/p&gt;

&lt;p&gt;This changes how we should think about agent execution.&lt;/p&gt;

&lt;p&gt;An agent isn't necessarily:&lt;/p&gt;

&lt;p&gt;HTTP request&lt;br&gt;&lt;br&gt;
    ↓&lt;br&gt;&lt;br&gt;
LLM&lt;br&gt;&lt;br&gt;
    ↓&lt;br&gt;&lt;br&gt;
response  &lt;/p&gt;

&lt;p&gt;It may instead be:&lt;/p&gt;

&lt;p&gt;Start&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Think&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Tool&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Think&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Tool&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Pause&lt;br&gt;&lt;br&gt;
 ↓  &lt;/p&gt;

&lt;p&gt;--- 4 hours later ---  &lt;/p&gt;

&lt;p&gt;↓&lt;br&gt;&lt;br&gt;
Resume&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Tool&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Think&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Complete  &lt;/p&gt;

&lt;p&gt;That is much closer to a workflow engine than a normal API request.&lt;/p&gt;

&lt;p&gt;Durable Execution Is Becoming Part of the Agent Stack&lt;/p&gt;

&lt;p&gt;Long-running agents introduce familiar distributed-system problems:&lt;/p&gt;

&lt;p&gt;process crashes&lt;br&gt;&lt;br&gt;
network failures&lt;br&gt;&lt;br&gt;
duplicate messages&lt;br&gt;&lt;br&gt;
timeouts&lt;br&gt;&lt;br&gt;
retries&lt;br&gt;&lt;br&gt;
partial execution&lt;br&gt;&lt;br&gt;
concurrent updates&lt;br&gt;&lt;br&gt;
human approvals&lt;br&gt;&lt;br&gt;
scheduled execution&lt;br&gt;&lt;br&gt;
deployment during execution  &lt;/p&gt;

&lt;p&gt;These problems existed long before LLMs.&lt;/p&gt;

&lt;p&gt;We're just rediscovering them inside agent systems.&lt;/p&gt;

&lt;p&gt;A production architecture may therefore look like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    User  
                     |  
                     v  
                API Gateway  
                     |  
                     v  
             Agent Orchestrator  
                     |  
         ┌───────────┼───────────┐  
         │           │           │  
         v           v           v  
       Model       Tools        MCP  
         │           │           │  
         └───────────┼───────────┘  
                     |  
                     v  
            Durable Workflow  
                     |  
        ┌────────────┼────────────┐  
        │            │            │  
        v            v            v  
     State DB      Queue       Event Log  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Frameworks are increasingly acknowledging this requirement. LangChain, for example, describes durable execution, memory, human-in-the-loop support, multi-tenancy, and observability as infrastructure needed underneath long-running production agents.&lt;/p&gt;

&lt;p&gt;MCP and Durable Execution Solve Different Problems&lt;/p&gt;

&lt;p&gt;This distinction is worth remembering.&lt;/p&gt;

&lt;p&gt;MCP answers:&lt;/p&gt;

&lt;p&gt;How does an agent communicate with tools and external systems?&lt;/p&gt;

&lt;p&gt;Durable execution answers:&lt;/p&gt;

&lt;p&gt;How does an agent reliably continue working over time?&lt;/p&gt;

&lt;p&gt;They complement each other.&lt;/p&gt;

&lt;p&gt;You might have:&lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  | MCP&lt;br&gt;&lt;br&gt;
  v&lt;br&gt;&lt;br&gt;
Salesforce  &lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  | MCP&lt;br&gt;&lt;br&gt;
  v&lt;br&gt;&lt;br&gt;
GitHub  &lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;&lt;br&gt;
  |&lt;br&gt;&lt;br&gt;
  | MCP&lt;br&gt;&lt;br&gt;
  v&lt;br&gt;&lt;br&gt;
Slack  &lt;/p&gt;

&lt;p&gt;while the overall workflow is managed separately:&lt;/p&gt;

&lt;p&gt;Step 1: Fetch GitHub issue&lt;br&gt;&lt;br&gt;
Step 2: Analyze code&lt;br&gt;&lt;br&gt;
Step 3: Generate patch&lt;br&gt;&lt;br&gt;
Step 4: Run tests&lt;br&gt;&lt;br&gt;
Step 5: Wait for approval&lt;br&gt;&lt;br&gt;
Step 6: Create PR&lt;br&gt;&lt;br&gt;
Step 7: Post Slack notification  &lt;/p&gt;

&lt;p&gt;The MCP servers do not need to remember the entire workflow.&lt;/p&gt;

&lt;p&gt;The orchestrator does.&lt;/p&gt;

&lt;p&gt;Observability Also Changes&lt;/p&gt;

&lt;p&gt;Traditional API monitoring might tell you:&lt;/p&gt;

&lt;p&gt;POST /agent&lt;br&gt;&lt;br&gt;
200 OK&lt;br&gt;&lt;br&gt;
Duration: 4.2s  &lt;/p&gt;

&lt;p&gt;That isn't enough.&lt;/p&gt;

&lt;p&gt;A production agent might execute:&lt;/p&gt;

&lt;p&gt;Run #8291  &lt;/p&gt;

&lt;p&gt;├── Model call&lt;br&gt;&lt;br&gt;
├── retrieve_documents&lt;br&gt;&lt;br&gt;
├── Model call&lt;br&gt;&lt;br&gt;
├── search_customer&lt;br&gt;&lt;br&gt;
├── Model call&lt;br&gt;&lt;br&gt;
├── update_customer&lt;br&gt;&lt;br&gt;
├── approval_required&lt;br&gt;&lt;br&gt;
├── PAUSED&lt;br&gt;&lt;br&gt;
├── approval_received&lt;br&gt;&lt;br&gt;
├── update_salesforce&lt;br&gt;&lt;br&gt;
├── send_email&lt;br&gt;&lt;br&gt;
└── complete  &lt;/p&gt;

&lt;p&gt;You need to understand the complete trajectory.&lt;/p&gt;

&lt;p&gt;That means tracking:&lt;/p&gt;

&lt;p&gt;model calls&lt;br&gt;&lt;br&gt;
tool calls&lt;br&gt;&lt;br&gt;
tool arguments&lt;br&gt;&lt;br&gt;
tool responses&lt;br&gt;&lt;br&gt;
latency&lt;br&gt;&lt;br&gt;
token usage&lt;br&gt;&lt;br&gt;
retries&lt;br&gt;&lt;br&gt;
approvals&lt;br&gt;&lt;br&gt;
guardrail decisions&lt;br&gt;&lt;br&gt;
state transitions&lt;br&gt;&lt;br&gt;
errors&lt;br&gt;&lt;br&gt;
cost  &lt;/p&gt;

&lt;p&gt;Agent platforms are moving in this direction as well. Current OpenAI tooling, for example, exposes structured tracing across model calls, tool calls, handoffs, guardrails, and custom spans.&lt;/p&gt;

&lt;p&gt;The Production Pattern&lt;/p&gt;

&lt;p&gt;If I were designing a serious agent system today, I would separate it roughly like this:&lt;/p&gt;

&lt;p&gt;┌───────────────────────────────┐&lt;br&gt;&lt;br&gt;
│           API Layer           │&lt;br&gt;&lt;br&gt;
└───────────────┬───────────────┘&lt;br&gt;&lt;br&gt;
                │&lt;br&gt;&lt;br&gt;
                ▼&lt;br&gt;&lt;br&gt;
┌───────────────────────────────┐&lt;br&gt;&lt;br&gt;
│      Agent Orchestrator       │&lt;br&gt;&lt;br&gt;
│                               │&lt;br&gt;&lt;br&gt;
│ Planning                      │&lt;br&gt;&lt;br&gt;
│ Reasoning                     │&lt;br&gt;&lt;br&gt;
│ Tool selection                │&lt;br&gt;&lt;br&gt;
└───────────────┬───────────────┘&lt;br&gt;&lt;br&gt;
                │&lt;br&gt;&lt;br&gt;
       ┌────────┴────────┐&lt;br&gt;&lt;br&gt;
       │                 │&lt;br&gt;&lt;br&gt;
       ▼                 ▼&lt;br&gt;&lt;br&gt;
┌─────────────┐    ┌───────────────┐&lt;br&gt;&lt;br&gt;
│ MCP / Tools │    │ Workflow      │&lt;br&gt;&lt;br&gt;
│             │    │ Runtime       │&lt;br&gt;&lt;br&gt;
│ Stateless   │    │               │&lt;br&gt;&lt;br&gt;
│ interface   │    │ Durable State │&lt;br&gt;&lt;br&gt;
└─────────────┘    └───────┬───────┘&lt;br&gt;&lt;br&gt;
                           │&lt;br&gt;&lt;br&gt;
                   ┌───────┼───────┐&lt;br&gt;&lt;br&gt;
                   ▼       ▼       ▼&lt;br&gt;&lt;br&gt;
                  DB     Queue    Logs  &lt;/p&gt;

&lt;p&gt;Notice the separation:&lt;/p&gt;

&lt;p&gt;MCP            → tool interoperability&lt;br&gt;&lt;br&gt;
LLM            → reasoning&lt;br&gt;&lt;br&gt;
Workflow layer → durability&lt;br&gt;&lt;br&gt;
Database       → state&lt;br&gt;&lt;br&gt;
Queue          → asynchronous execution&lt;br&gt;&lt;br&gt;
Tracing        → observability&lt;br&gt;&lt;br&gt;
Guardrails     → control  &lt;/p&gt;

&lt;p&gt;Trying to make the LLM responsible for all of these concerns is where agent architecture usually starts falling apart.&lt;/p&gt;

&lt;p&gt;The Bigger Lesson&lt;/p&gt;

&lt;p&gt;The AI industry spent the first phase of the LLM boom asking:&lt;/p&gt;

&lt;p&gt;Which model should we use?&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;Which prompt should we use?&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;Which agent framework should we use?&lt;/p&gt;

&lt;p&gt;The more important production questions are increasingly becoming:&lt;/p&gt;

&lt;p&gt;How does the workflow recover?  &lt;/p&gt;

&lt;p&gt;How do we resume execution?  &lt;/p&gt;

&lt;p&gt;How do we prevent duplicate side effects?  &lt;/p&gt;

&lt;p&gt;Where does state live?  &lt;/p&gt;

&lt;p&gt;How do we authorize tool calls?  &lt;/p&gt;

&lt;p&gt;How do we trace a 50-step execution?  &lt;/p&gt;

&lt;p&gt;How do we roll out a new agent version safely?  &lt;/p&gt;

&lt;p&gt;How do we replay failed workflows?  &lt;/p&gt;

&lt;p&gt;How do we evaluate complete trajectories?  &lt;/p&gt;

&lt;p&gt;These are not fundamentally AI questions.&lt;/p&gt;

&lt;p&gt;They are &lt;strong&gt;distributed systems questions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that might be one of the most important shifts happening in AI engineering right now.&lt;/p&gt;

&lt;p&gt;MCP becoming more stateless doesn't remove state from agent systems.&lt;/p&gt;

&lt;p&gt;It simply puts state where it belongs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the application and workflow layer, not the transport protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Final Thought&lt;/p&gt;

&lt;p&gt;The next generation of AI applications probably won't look like:&lt;/p&gt;

&lt;p&gt;User → Prompt → LLM → Response  &lt;/p&gt;

&lt;p&gt;They will look more like:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Agent&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Planner&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Tools / MCP&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Durable Workflow&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Events&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Approvals&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Retries&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Observability&lt;br&gt;&lt;br&gt;
 ↓&lt;br&gt;&lt;br&gt;
Result  &lt;/p&gt;

&lt;p&gt;The model may be the brain.&lt;/p&gt;

&lt;p&gt;But production reliability still comes from good systems engineering.&lt;/p&gt;

&lt;p&gt;And no amount of prompt engineering can replace that.&lt;/p&gt;

</description>
      <category>aimcparchitectureagents</category>
    </item>
    <item>
      <title>This is my post</title>
      <dc:creator>Robin Singh</dc:creator>
      <pubDate>Thu, 24 Sep 2026 00:51:01 +0000</pubDate>
      <link>https://dev.to/robin_singh_456fbe1f602b9/this-is-my-post-ih1</link>
      <guid>https://dev.to/robin_singh_456fbe1f602b9/this-is-my-post-ih1</guid>
      <description>&lt;p&gt;Testing the post &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
