<?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: varun pratap Bhardwaj</title>
    <description>The latest articles on DEV Community by varun pratap Bhardwaj (@varun_pratapbhardwaj_b13).</description>
    <link>https://dev.to/varun_pratapbhardwaj_b13</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%2F3758588%2F95135c13-9af9-421d-8714-bbf63b1f9055.png</url>
      <title>DEV Community: varun pratap Bhardwaj</title>
      <link>https://dev.to/varun_pratapbhardwaj_b13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/varun_pratapbhardwaj_b13"/>
    <language>en</language>
    <item>
      <title>AI Agents Have Protocols. They Still Need Behavioral Contracts.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Sat, 15 Aug 2026 14:56:00 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/ai-agents-have-protocols-they-still-need-behavioral-contracts-1pi8</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/ai-agents-have-protocols-they-still-need-behavioral-contracts-1pi8</guid>
      <description>&lt;h1&gt;
  
  
  AI Agents Have Protocols. They Still Need Behavioral Contracts.
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Canonical note:&lt;/strong&gt; Publish the Medium version first. Then replace &lt;code&gt;https://medium.com/@varun.pratap.bhardwaj/ai-agents-have-protocols-they-still-need-behavioral-contracts-b612da467aae&lt;/code&gt; in the DEV front matter with the final Medium URL before publishing on DEV.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI agent infrastructure is rapidly standardizing connectivity.&lt;/p&gt;

&lt;p&gt;We have protocols for tools, models, and agent-to-agent communication.&lt;/p&gt;

&lt;p&gt;But a connectivity protocol does not answer a production question that becomes more important as agents gain side effects:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is this agent allowed to do right now, what must remain true while it acts, and what evidence will prove the decision later?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the problem behind &lt;strong&gt;Agent Behavioral Contracts (ABC)&lt;/strong&gt; and the open-source project &lt;strong&gt;AgentAssert&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project started as a research question and is becoming a runtime architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Prompts are useful. Prompts are not policy engines.
&lt;/h2&gt;

&lt;p&gt;Consider a coding agent with shell access.&lt;/p&gt;

&lt;p&gt;You can put this in the system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Never execute destructive commands.
Never access credentials.
Ask for approval before changing production.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are useful instructions.&lt;/p&gt;

&lt;p&gt;But the side effect is still controlled by whatever execution path actually calls the tool.&lt;/p&gt;

&lt;p&gt;A stronger design creates an external behavioral decision:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tool.requested
      |
      v
normalize event
      |
      v
evaluate contract
      |
      +---- ALLOW --------&amp;gt; invoke tool
      |
      +---- DENY ---------&amp;gt; return refusal + receipt
      |
      +---- REQUIRE_APPROVAL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the policy is no longer only something the model is expected to remember.&lt;/p&gt;

&lt;p&gt;It is an executable artifact.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The ABC model
&lt;/h2&gt;

&lt;p&gt;Paper I formalized an Agent Behavioral Contract around four ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preconditions&lt;/strong&gt; — what must be true before execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invariants&lt;/strong&gt; — what must remain true during execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance policies&lt;/strong&gt; — organizational and operational constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery mechanisms&lt;/strong&gt; — what happens when behavior violates or approaches a boundary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A minimal conceptual contract might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;contract&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production-write-policy&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.0&lt;/span&gt;

&lt;span class="na"&gt;preconditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deployment_environment == "production"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;actor_authenticated == &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="na"&gt;invariants&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;secrets_in_output == &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;total_cost_usd &amp;lt;= &lt;/span&gt;&lt;span class="m"&gt;5.00&lt;/span&gt;

&lt;span class="na"&gt;governance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;production_write requires human_approval&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;allowed_tools in approved_tool_set&lt;/span&gt;

&lt;span class="na"&gt;recovery&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;on_violation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deny&lt;/span&gt;
    &lt;span class="na"&gt;emit_receipt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That snippet is intentionally illustrative rather than the canonical current ContractSpec syntax. In production documentation, the contract shown to users should be copied from a version-validated repository example.&lt;/p&gt;

&lt;p&gt;The engineering principle is what matters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;policy becomes explicit, versioned, and independently evaluable.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Runtime enforcement needs an actual boundary
&lt;/h2&gt;

&lt;p&gt;A contract is only useful as an enforcement mechanism if it is evaluated before the side effect.&lt;/p&gt;

&lt;p&gt;That means the runtime architecture needs a Policy Enforcement Point.&lt;/p&gt;

&lt;p&gt;Possible surfaces include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP tool requests;&lt;/li&gt;
&lt;li&gt;framework before-tool hooks;&lt;/li&gt;
&lt;li&gt;model requests;&lt;/li&gt;
&lt;li&gt;HTTP or gRPC gateways;&lt;/li&gt;
&lt;li&gt;agent input/output boundaries;&lt;/li&gt;
&lt;li&gt;memory write proposals;&lt;/li&gt;
&lt;li&gt;job or workflow transitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key word is &lt;strong&gt;possible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No adapter should claim complete control merely because it can observe one surface.&lt;/p&gt;

&lt;p&gt;For example, an MCP interposer can make strong statements about MCP calls that pass through it.&lt;/p&gt;

&lt;p&gt;It cannot automatically control a product's unrelated native editor or shell path unless that path is also routed through an enforceable boundary.&lt;/p&gt;

&lt;p&gt;So a useful integration matrix should state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;framework and verified version;&lt;/li&gt;
&lt;li&gt;adapter version;&lt;/li&gt;
&lt;li&gt;observable events;&lt;/li&gt;
&lt;li&gt;pre-side-effect enforceable events;&lt;/li&gt;
&lt;li&gt;excluded/native surfaces;&lt;/li&gt;
&lt;li&gt;fail-open or fail-closed behavior;&lt;/li&gt;
&lt;li&gt;conformance evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is more meaningful than a wall of integration logos.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Declare → Enforce → Prove
&lt;/h2&gt;

&lt;p&gt;The product model for AgentAssert is increasingly simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declare
&lt;/h3&gt;

&lt;p&gt;A versioned ContractSpec defines the behavioral constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforce
&lt;/h3&gt;

&lt;p&gt;A covered event is normalized and evaluated.&lt;/p&gt;

&lt;p&gt;A decision can be represented with a vocabulary such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOW
DENY
MODIFY
REDACT
REQUIRE_APPROVAL
DEFER
ERROR / INCONCLUSIVE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;INCONCLUSIVE&lt;/code&gt; or an equivalent state is important.&lt;/p&gt;

&lt;p&gt;If a required signal is unavailable, silently treating the action as compliant can be dangerous.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prove
&lt;/h3&gt;

&lt;p&gt;The decision should emit a receipt.&lt;/p&gt;

&lt;p&gt;A useful receipt includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contract_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tool.requested"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"normalized_action_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evaluated_rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"decision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DENY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coverage_profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"side_effect_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_executed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trace_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provenance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This turns “the guardrail blocked it” into something independently inspectable.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Why trajectory-level behavior matters
&lt;/h2&gt;

&lt;p&gt;Most agent evaluation still focuses heavily on single outcomes.&lt;/p&gt;

&lt;p&gt;But an agent can produce a reasonable-looking final answer while violating important constraints during execution.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it queried an unauthorized source;&lt;/li&gt;
&lt;li&gt;it exposed data to a tool before redacting the final response;&lt;/li&gt;
&lt;li&gt;it exceeded a budget;&lt;/li&gt;
&lt;li&gt;it made a prohibited intermediate write;&lt;/li&gt;
&lt;li&gt;it recovered after a drift event;&lt;/li&gt;
&lt;li&gt;it repeatedly approached a threshold across a long session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A behavioral contract therefore operates over a &lt;strong&gt;trajectory&lt;/strong&gt;, not just the final text.&lt;/p&gt;

&lt;p&gt;This is also where drift and recovery become meaningful.&lt;/p&gt;

&lt;p&gt;The question is not only:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Was turn 17 acceptable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did the system remain within the declared behavioral envelope over the mission?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. The composition problem
&lt;/h2&gt;

&lt;p&gt;Now consider a multi-agent pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A -&amp;gt; Agent B -&amp;gt; Agent C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each component has a measured success rate.&lt;/p&gt;

&lt;p&gt;A naive reliability calculation can be badly misleading if the component failures are dependent.&lt;/p&gt;

&lt;p&gt;Shared causes include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;same model
same context
same retrieval source
same memory
same orchestrator
same upstream API
same hidden assumption
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a shared failure mode hits all three components, their errors can be highly correlated.&lt;/p&gt;

&lt;p&gt;Now consider redundancy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          -&amp;gt; Agent B1 -&amp;gt;
Agent A                  -&amp;gt; decision
          -&amp;gt; Agent B2 -&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If B1 and B2 fail independently, redundancy may help significantly.&lt;/p&gt;

&lt;p&gt;If they share the same failure cause, the apparent redundancy may provide far less protection.&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;dependence interacts with topology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is the problem addressed by Paper II: compositional reliability without silently assuming independent failures.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. A better reliability API
&lt;/h2&gt;

&lt;p&gt;The important product idea from the V2 work is that reliability should expose its evidence basis.&lt;/p&gt;

&lt;p&gt;Rather than returning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reliability = 0.94
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a system should be capable of returning something conceptually closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;end_to_end_mission_success&lt;/span&gt;

&lt;span class="na"&gt;mission_distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ecommerce-support-v3&lt;/span&gt;

&lt;span class="na"&gt;topology&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;series&lt;/span&gt;

&lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;direct_runs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;420&lt;/span&gt;
  &lt;span class="na"&gt;available_joint_moments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;stage_a&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;stage_b&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;stage_b&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;stage_c&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;guarantee&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;lower_bound&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;confidence_parameter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;

&lt;span class="na"&gt;assumptions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;

&lt;span class="na"&gt;limitations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;

&lt;span class="na"&gt;valid_until&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;model/version change&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;contract/version change&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mission-distribution shift&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact representation can evolve.&lt;/p&gt;

&lt;p&gt;The design principle should not:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;never separate the reliability number from the assumptions that make it meaningful.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Direct observation should beat reconstructed confidence
&lt;/h2&gt;

&lt;p&gt;If you can directly observe the system-level success event, that should usually be the primary evidence.&lt;/p&gt;

&lt;p&gt;For example, if the mission is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Order changed correctly, customer notified, no unauthorized discount,
and audit record written"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then directly evaluate that mission outcome across complete executions.&lt;/p&gt;

&lt;p&gt;Do not throw away the end-to-end evidence and reconstruct success from component pass rates unless you have a specific reason.&lt;/p&gt;

&lt;p&gt;This sounds obvious.&lt;/p&gt;

&lt;p&gt;In modular AI evaluation, it is surprisingly easy to violate.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Sometimes the right answer is “uncertifiable”
&lt;/h2&gt;

&lt;p&gt;Suppose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one stage has missing logs;&lt;/li&gt;
&lt;li&gt;failures are selectively absent;&lt;/li&gt;
&lt;li&gt;the mission distribution changed after a model upgrade;&lt;/li&gt;
&lt;li&gt;components were evaluated on incompatible datasets;&lt;/li&gt;
&lt;li&gt;co-execution evidence is unavailable;&lt;/li&gt;
&lt;li&gt;the integration cannot observe the event that the contract claims to enforce.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A production reliability system should not be forced to produce a reassuring number.&lt;/p&gt;

&lt;p&gt;It should be allowed to produce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UNCERTIFIABLE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with reasons.&lt;/p&gt;

&lt;p&gt;That is a stronger engineering interface than fake precision.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. MCP is a useful first proof surface
&lt;/h2&gt;

&lt;p&gt;MCP is particularly useful for demonstrating this architecture because the tool invocation boundary is concrete.&lt;/p&gt;

&lt;p&gt;A credible demonstration should show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. start real downstream MCP server
2. perform prohibited request without contract
3. confirm side effect occurs
4. route server through AgentAssert guard
5. repeat same request
6. receive DENY
7. confirm downstream invocation count remains 0
8. verify decision receipt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a much stronger demo than a screenshot saying “blocked.”&lt;/p&gt;

&lt;p&gt;The critical proof is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the prohibited side effect never reached the downstream tool.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  11. The portable-contract direction
&lt;/h2&gt;

&lt;p&gt;A portable behavioral layer needs canonical data structures.&lt;/p&gt;

&lt;p&gt;The current product blueprint is converging around concepts like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AgentActionEnvelope
ContractDecision
DecisionReceipt
CapabilityManifest
ContractBundle
EvidenceReference
ApprovalRequest
CertificationBundle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows each framework adapter to map its native lifecycle into one common behavioral vocabulary.&lt;/p&gt;

&lt;p&gt;The adapter then publishes what it can actually support.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C0 = observe only
C1 = pre-model decision
C2 = pre-tool decision
C3 = pre-side-effect + result handling + approval
C4 = receipts + replay protection + signed evidence + conformance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact naming can still evolve, but capability-grading is much better than binary “supported / unsupported.”&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Relationship to other agent infrastructure
&lt;/h2&gt;

&lt;p&gt;Behavioral contracts do not replace the rest of the stack.&lt;/p&gt;

&lt;p&gt;They complement it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protocols:&lt;/strong&gt; connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity / authorization:&lt;/strong&gt; who can access what.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guardrails:&lt;/strong&gt; selected input/output/call screening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability:&lt;/strong&gt; traces and telemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluation:&lt;/strong&gt; scenario-based evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavioral contracts:&lt;/strong&gt; portable behavioral obligations connected to runtime decisions and trajectory-level evidence.&lt;/p&gt;

&lt;p&gt;These layers should integrate rather than compete for one giant “AI safety” label.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. The broader Qualixar architecture
&lt;/h2&gt;

&lt;p&gt;The separation I find useful is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM / model
    |
    v
SuperLocalMemory
governed durable context
    |
    v
AgentAssert
behavioral contract + runtime decisions
    |
    v
AgentAssay
evaluation / regression / assurance
    |
    v
Qualixar OS / bounded execution
orchestration, approvals, bounded workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In shorthand:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rent the LLM. Own the memory. Enforce the behavior.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model is replaceable.&lt;/p&gt;

&lt;p&gt;The organization's memory and behavioral policy should not be.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. What I want AgentAssert to become
&lt;/h2&gt;

&lt;p&gt;Not another prompt wrapper.&lt;/p&gt;

&lt;p&gt;Not a logo collection.&lt;/p&gt;

&lt;p&gt;Not a dashboard that produces an unexplained “reliability score.”&lt;/p&gt;

&lt;p&gt;The target is a neutral behavioral-contract layer between agent intent and consequential action.&lt;/p&gt;

&lt;p&gt;It should answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What behavior is permitted?&lt;/li&gt;
&lt;li&gt;Can this action execute now?&lt;/li&gt;
&lt;li&gt;Did the agent remain within contract across the trajectory?&lt;/li&gt;
&lt;li&gt;What drifted, failed, or recovered?&lt;/li&gt;
&lt;li&gt;What reliability statement is justified by the evidence?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is a difficult product.&lt;/p&gt;

&lt;p&gt;It is also the kind of infrastructure I think agentic AI will eventually require.&lt;/p&gt;




&lt;h2&gt;
  
  
  Research and implementation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paper I:&lt;/strong&gt; arXiv:2602.22302&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper II:&lt;/strong&gt; arXiv:2608.12895&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; github.com/qualixar/agentassert-abc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project:&lt;/strong&gt; agentassert.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are running agents with consequential tools, start with one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which action in your current stack would you most want an independent contract to deny before the tool ever sees it?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Agents Don't Just Need Memory. They Need Memory Governance.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Thu, 13 Aug 2026 10:50:41 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/ai-agents-dont-just-need-memory-they-need-memory-governance-1lm1</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/ai-agents-dont-just-need-memory-they-need-memory-governance-1lm1</guid>
      <description>&lt;p&gt;An AI agent reads a hidden instruction on a webpage. The instruction looks useful, so the agent stores it. The session ends. Weeks later, a different task retrieves that record as trusted context. This is the class of persistent risk that the &lt;a href="https://genai.owasp.org/2026/05/13/memory-is-a-feature-it-is-also-an-attack-surface/" rel="noopener noreferrer"&gt;OWASP GenAI Security Project describes as memory and context poisoning&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The original prompt injection is gone. Its memory remains.&lt;/p&gt;

&lt;p&gt;This is the uncomfortable property of durable agent memory: persistence gives useful context a longer life, but it can give bad context a longer life too. A memory system does not become safe because it retrieves the most similar sentence. It becomes operable when a team can govern what enters memory, identify the authoritative record, inspect why a later recall was returned, and deliberately correct or erase state.&lt;/p&gt;

&lt;p&gt;That is the central argument of our new public preprint:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SuperLocalMemory 4.0: The Governed Memory Operating System for AI Agents&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The paper is available as &lt;a href="https://arxiv.org/abs/2608.08253" rel="noopener noreferrer"&gt;arXiv:2608.08253&lt;/a&gt;. The implementation is &lt;a href="https://github.com/qualixar/superlocalmemory" rel="noopener noreferrer"&gt;open source on GitHub&lt;/a&gt;, and the companion citable archive is on &lt;a href="https://doi.org/10.5281/zenodo.21853302" rel="noopener noreferrer"&gt;Zenodo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The paper does not claim that one memory product solves every agent-security problem. It makes a narrower engineering argument: once memory influences future agent behaviour, retrieval, governance, and operations cannot remain separate afterthoughts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory becomes operational state before teams notice
&lt;/h2&gt;

&lt;p&gt;Most discussions of agent memory begin with retrieval:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which embedding model should we use?&lt;/li&gt;
&lt;li&gt;Should we add a vector database?&lt;/li&gt;
&lt;li&gt;Is hybrid retrieval better than semantic search alone?&lt;/li&gt;
&lt;li&gt;How much history should fit in the prompt?&lt;/li&gt;
&lt;li&gt;Which reranker gives the best top-k?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are valid questions. They are not the first questions.&lt;/p&gt;

&lt;p&gt;The first question is what the system is allowed to preserve.&lt;/p&gt;

&lt;p&gt;An agent may retain a naming preference today, an architecture decision tomorrow, and an incident-response rule next month. Several agents may begin sharing project context. A support workflow may depend on the remembered history of a customer issue. A coding agent may carry forward a correction that prevents the same mistake in the next session.&lt;/p&gt;

&lt;p&gt;At some point, memory stops being convenience data and starts shaping production decisions.&lt;/p&gt;

&lt;p&gt;That transition is easy to miss because nothing visibly breaks. The agent simply becomes more useful. But the operational burden has already changed. A team now needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exact record entered durable memory?&lt;/li&gt;
&lt;li&gt;Which identity or process wrote it?&lt;/li&gt;
&lt;li&gt;Which policy and scope applied to the write?&lt;/li&gt;
&lt;li&gt;What became queryable when the operation completed?&lt;/li&gt;
&lt;li&gt;Where does the authoritative record live?&lt;/li&gt;
&lt;li&gt;Which retrieval evidence supported a later recall?&lt;/li&gt;
&lt;li&gt;Which optional paths could move data outside the local boundary?&lt;/li&gt;
&lt;li&gt;How can the record be corrected, exported, or erased?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A similarity score cannot answer those questions. Neither can a generic “memory saved” toast.&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%2F46i1p4sebzo74spjz2yu.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%2F46i1p4sebzo74spjz2yu.png" alt="Durable agent memory must move through an inspectable operating contract: authorize, write, verify, retrieve, trace, and correct." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A retrieval result is not an explanation
&lt;/h2&gt;

&lt;p&gt;Imagine an incident-response agent retrieving an old remediation instruction. The instruction may be correct. It may also be stale, written for another environment, or accepted from an inappropriate source.&lt;/p&gt;

&lt;p&gt;If the system exposes only a ranked result, the operator sees the consequence without the chain of custody.&lt;/p&gt;

&lt;p&gt;This is why provenance and recall evidence are not decorative metadata. They are how an engineer investigates a consequential output. The important question is not merely, “Was this record relevant?” It is, “Why was this record eligible to influence the agent now?”&lt;/p&gt;

&lt;p&gt;The distinction mirrors mature infrastructure practice. Production systems do not treat identity, policy, observability, recovery, and audit as optional features surrounding the real runtime. Those controls are what make the runtime operable when it receives surprising input or enters a partial-failure state.&lt;/p&gt;

&lt;p&gt;Agent memory needs the same control-plane treatment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Governance has to start at the write
&lt;/h2&gt;

&lt;p&gt;Many memory defenses focus on read time: retrieve candidate records, score trust, filter suspicious content, and constrain what reaches the model. Those controls matter, but read-time filtering arrives after persistent state has already been accepted.&lt;/p&gt;

&lt;p&gt;The stronger design pattern is &lt;strong&gt;admission control plus durable obligations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before a record becomes authoritative, the system should be able to identify the writer, apply policy, bind the operation to the active generation and scope, and issue a receipt. If the canonical write creates derived projections—search indexes, graph state, caches, or external replicas—the system should know which projection owners must apply, verify, compensate, or erase their copy.&lt;/p&gt;

&lt;p&gt;The SuperLocalMemory V4 paper describes this as a reliability spine for the primary write path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generation-fenced admission&lt;/strong&gt; prevents a stale runtime generation from silently accepting work under a superseded control state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A policy registry&lt;/strong&gt; makes the authorization decision an explicit part of admission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verifiable memory transactions&lt;/strong&gt; turn a write into an inspectable operation rather than a best-effort append.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-projection responsibilities&lt;/strong&gt; assign apply, verify, compensate, and erase ownership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hash-checkable completion manifests&lt;/strong&gt; provide a concrete completion artefact.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The terminology matters only because it names failure questions. If a request is retried, can the system distinguish a duplicate from a new write? If the canonical record succeeds while a projection is unavailable, can the operation be reconciled? If erasure is requested, can the system identify every registered obligation? If policy rejects a write, can an operator inspect that boundary?&lt;/p&gt;

&lt;p&gt;This is not about adding bureaucracy to a personal note. It is about having a path to evidence when memory becomes consequential.&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%2Fqs13wq468tsil2hm920w.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%2Fqs13wq468tsil2hm920w.png" alt="The governed write path separates admission, canonical commit, projection obligations, verification, and a completion manifest." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  “Local-first” must describe a boundary, not a mood
&lt;/h2&gt;

&lt;p&gt;Local-first is frequently reduced to “there is a local file.” That is inadequate.&lt;/p&gt;

&lt;p&gt;A system may store its primary database locally while sending text to a remote embedding model, provider-backed enrichment service, connector, cloud backup, proxy, or reranker. Some deployments will accept those trade-offs. The failure is not using a networked capability; the failure is hiding an active external path behind an unqualified local claim.&lt;/p&gt;

&lt;p&gt;SuperLocalMemory V4 separates canonical local state from optional external capabilities. Its canonical memory can remain in a configured local data root. Provider-backed enrichment, connectors, cloud backup, proxy paths, dependency or model downloads, and peer behaviour are separate choices that can create network paths.&lt;/p&gt;

&lt;p&gt;The operating modes make that boundary legible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mode A — Local Guardian:&lt;/strong&gt; the core memory path uses local state without a cloud model provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mode B — Smart Local:&lt;/strong&gt; an operator-managed local model can support enrichment while canonical memory remains local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mode C — Full Power:&lt;/strong&gt; a configured external provider can support enrichment; the relevant data path is therefore provider-assisted, not local-only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful promise is not “nothing can ever leave this machine.” The useful promise is that canonical state, optional paths, and operator choices are distinguishable.&lt;/p&gt;

&lt;p&gt;That distinction is the basis of the campaign line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rent the LLM. Own the memory.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Models will change. Providers will change. Inference budgets will change. The durable operational context that guides the next action should not become an accidental by-product trapped inside whichever model interface a team happens to rent today.&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%2F8wcc0z4v4qanopfido1q.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%2F8wcc0z4v4qanopfido1q.png" alt="Local-first means a local canonical record with explicit, optional network paths—not an unqualified claim that every feature is offline." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Retrieval still matters—but it is one part of the contract
&lt;/h2&gt;

&lt;p&gt;Governance does not replace retrieval quality. A governed system that cannot find useful context is still a poor memory system.&lt;/p&gt;

&lt;p&gt;The V4 architecture combines five retrieval channels through reciprocal-rank fusion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dense semantic retrieval for meaning-level similarity.&lt;/li&gt;
&lt;li&gt;BM25 lexical retrieval for exact terms and rare identifiers.&lt;/li&gt;
&lt;li&gt;Temporal retrieval for time-sensitive context.&lt;/li&gt;
&lt;li&gt;Hopfield-associative retrieval for learned associations.&lt;/li&gt;
&lt;li&gt;Spreading activation across related entities and memories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The paper also describes bi-temporal recall, multi-scope personal, shared, and global memory, role-based access control, audit trails, and GDPR-oriented export and verified erasure mechanisms. The runtime exposes CLI, MCP, HTTP daemon, dashboard, editor-integration, and framework-adapter surfaces.&lt;/p&gt;

&lt;p&gt;That list is not evidence by itself. A feature inventory tells us what exists; a protocol tells us what was tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four papers, one SuperLocalMemory research line
&lt;/h2&gt;

&lt;p&gt;V4 is the latest paper, but it is not the first research record behind SuperLocalMemory. The public work now spans four arXiv preprints, newest first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2608.08253" rel="noopener noreferrer"&gt;SuperLocalMemory 4.0: The Governed Memory Operating System for AI Agents&lt;/a&gt;&lt;/strong&gt; — the current V4 architecture. It brings retrieval, learning, governance, operating modes, write-path reliability, and operator surfaces into one system description.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2604.04514" rel="noopener noreferrer"&gt;SuperLocalMemory V3.3: The Living Brain&lt;/a&gt;&lt;/strong&gt; — the lifecycle paper. It explores biologically inspired forgetting, cognitive quantization, and multi-channel retrieval for zero-LLM agent memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2603.14588" rel="noopener noreferrer"&gt;SuperLocalMemory V3: Information-Geometric Foundations for Zero-LLM Enterprise Agent Memory&lt;/a&gt;&lt;/strong&gt; — the mathematical-foundations paper. It studies information-geometric retrieval, lifecycle dynamics, and contradiction modelling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://arxiv.org/abs/2603.02240" rel="noopener noreferrer"&gt;SuperLocalMemory: Privacy-Preserving Multi-Agent Memory with Bayesian Trust Defense Against Memory Poisoning&lt;/a&gt;&lt;/strong&gt; — the privacy and threat-model paper. It studies local-first multi-agent memory, provenance, isolation, and Bayesian trust scoring against memory poisoning.&lt;/li&gt;
&lt;/ol&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%2F2dp9ohp0kfr0752xuowa.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%2F2dp9ohp0kfr0752xuowa.png" alt="The four-paper SuperLocalMemory research lineage, from privacy and trust through mathematical retrieval and cognitive lifecycle to the V4 governed memory operating system." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These papers form a research lineage; they are not one pooled benchmark. Each is a public preprint with its own version, implementation context, methodology, and evidence boundary. Historical V3 results should not be relabelled as fresh V4 release measurements. The V4 paper explicitly consolidates the earlier research direction while reporting separate current mechanism evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the 2,200 repetitions establish—and what they do not
&lt;/h2&gt;

&lt;p&gt;The V4 paper evaluates eleven fault-injection and mechanism scenarios, each repeated 200 times. The released evidence bundle reports &lt;strong&gt;2,200 of 2,200 deterministic repetitions&lt;/strong&gt; upholding their stated scoped component properties.&lt;/p&gt;

&lt;p&gt;It also reports the governed write envelope at 3.522 ms p50 and 5.297 ms p99, compared with an ungoverned baseline of 1.835 ms p50 and 2.569 ms p99 in the reported in-process setup. That corresponds to measured in-process control-plane overhead of 1.687 ms at p50 and 2.728 ms at p99.&lt;/p&gt;

&lt;p&gt;Those numbers require their boundary.&lt;/p&gt;

&lt;p&gt;They are scoped component and mechanism measurements. They are &lt;strong&gt;not&lt;/strong&gt; an end-to-end multi-process production guarantee. They are &lt;strong&gt;not&lt;/strong&gt; an external retrieval-accuracy benchmark. They do &lt;strong&gt;not&lt;/strong&gt; establish benchmark superiority over another product. They are &lt;strong&gt;not&lt;/strong&gt; a compliance certification. The paper is a public preprint, not a venue-reviewed publication.&lt;/p&gt;

&lt;p&gt;This limitation is not fine print. In AI Reliability Engineering, scope is part of the result. Removing the scope produces a stronger marketing sentence and a weaker technical claim.&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%2Fnj84h8e644qyc7xsekxv.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%2Fnj84h8e644qyc7xsekxv.png" alt="The V4 release evidence covers eleven scoped scenarios and 2,200 deterministic repetitions; the limitation travels with the result." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A five-minute test for any agent-memory system
&lt;/h2&gt;

&lt;p&gt;You do not need to adopt SuperLocalMemory to use the paper's operating questions. Apply this test to your current memory stack.&lt;/p&gt;

&lt;p&gt;Choose one bounded workflow with synthetic or non-sensitive data. Do not begin by ingesting an entire company knowledge base. That is the wrong move because it creates a large, opaque state surface before anyone has established write authority, scope, or recall investigation.&lt;/p&gt;

&lt;p&gt;Then run this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write one record with a declared source and scope.&lt;/li&gt;
&lt;li&gt;Capture the receipt or operation identifier.&lt;/li&gt;
&lt;li&gt;Confirm when the canonical record becomes queryable.&lt;/li&gt;
&lt;li&gt;Recall it with a precise query.&lt;/li&gt;
&lt;li&gt;Inspect the evidence behind the result.&lt;/li&gt;
&lt;li&gt;Correct or erase the record and verify the outcome.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the test, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Could another engineer reproduce the operation in an isolated workspace?&lt;/li&gt;
&lt;li&gt;Could the team identify the authoritative record if a projection disagreed?&lt;/li&gt;
&lt;li&gt;Could the operator list which external paths were active?&lt;/li&gt;
&lt;li&gt;Could a future incident reviewer trace the recall back to its source?&lt;/li&gt;
&lt;li&gt;Could the team prove that a correction or erase operation completed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those answers are vague, the gap may not be retrieval. It may be operability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model is replaceable. The memory contract is strategic.
&lt;/h2&gt;

&lt;p&gt;Agent memory is becoming a long-lived layer between models, tools, people, and future actions. That makes it valuable. It also makes it dangerous to treat as an invisible convenience.&lt;/p&gt;

&lt;p&gt;The engineering requirement is not perfect memory. Perfect memory would be a liability. The requirement is controlled memory: explicit admission, authoritative state, inspectable recall, bounded sharing, deliberate forgetting, and honest evidence.&lt;/p&gt;

&lt;p&gt;That is the argument behind SuperLocalMemory V4 and the broader category we are building at Qualixar: &lt;strong&gt;AI Reliability Engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The LLM can be rented. The memory contract should remain yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read and inspect the work:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2608.08253" rel="noopener noreferrer"&gt;SuperLocalMemory 4.0 paper — arXiv:2608.08253&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/qualixar/superlocalmemory" rel="noopener noreferrer"&gt;Open-source SuperLocalMemory repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.superlocalmemory.com/research" rel="noopener noreferrer"&gt;SuperLocalMemory research and evidence page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doi.org/10.5281/zenodo.21853302" rel="noopener noreferrer"&gt;Companion Zenodo archive — DOI 10.5281/zenodo.21853302&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Varun Pratap Bhardwaj is the founder of Qualixar and researches AI Reliability Engineering. SuperLocalMemory is an independent open-source Qualixar project.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>security</category>
    </item>
    <item>
      <title>How AI Memory Actually Works</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Fri, 31 Jul 2026 15:07:15 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/how-ai-memory-actually-works-2jb</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/how-ai-memory-actually-works-2jb</guid>
      <description>&lt;p&gt;Open ChatGPT in a browser and ask it to remember that you are vegetarian. It can carry that fact into a later conversation. Open Claude, work inside a project, and it can maintain a memory for that project without mixing it with another one.&lt;/p&gt;

&lt;p&gt;Now move into a terminal. Open Claude Code or Codex on a real repository. What counts as memory there is often a markdown file: &lt;code&gt;CLAUDE.md&lt;/code&gt; for Claude Code, or an equivalent instruction file read by the coding agent.&lt;/p&gt;

&lt;p&gt;These two worlds use the same word for very different mechanisms.&lt;/p&gt;

&lt;p&gt;In the browser, the memory system lives on the provider's side. In your terminal, the file lives on your disk. The browser system can select information and bring it forward. The local file gives you ownership and legibility. But a file does not rank its contents, understand that one fact replaced another, or decide which three lines matter for the question you just asked. It is a document, read as a document.&lt;/p&gt;

&lt;p&gt;That contrast is the cleanest place to start, because it removes a common mistake: memory is not whatever text happens to survive between prompts.&lt;/p&gt;

&lt;p&gt;ChatGPT itself has two memory mechanisms, according to OpenAI's published documentation. Saved memories are the explicit items you tell it to remember. They are visible, editable, and deletable. Reference chat history is the implicit mechanism: it selects useful information from earlier conversations to carry forward. These mechanisms are controlled separately, and saved memories are stored separately from chat history. Deleting a conversation does not, by itself, delete a saved memory created from that conversation.&lt;/p&gt;

&lt;p&gt;Claude's published documentation describes separate memory per project. Its memory summary can be viewed and edited, while incognito chat provides a way to avoid carrying a conversation into memory. That project boundary matters. Client work and personal work should not become one undifferentiated pool.&lt;/p&gt;

&lt;p&gt;Claude Code is a different case. Its memory mechanism is hierarchical markdown files named &lt;code&gt;CLAUDE.md&lt;/code&gt;. The file is client-side, inspectable, and yours. That is useful. It is also static. If an old instruction remains after the architecture changes, the file does not know it is stale. If it grows to several pages, it does not know which paragraph deserves attention now. It has no retrieval system because it is not a retrieval system.&lt;/p&gt;

&lt;p&gt;So the real engineering problem is not “how do I preserve text?” The problem is: how do I build something that can decide what is worth keeping, recover it by meaning, understand time and relationships, stay inside the right boundary, and become better without silently becoming worse?&lt;/p&gt;

&lt;p&gt;That is an AI memory system.&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%2Fho1dy5m7rgtgwpgwis1m.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%2Fho1dy5m7rgtgwpgwis1m.png" alt="Provider-side browser memory on one side, a local instruction file on the other, bridged by a real memory layer" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A database is not a memory
&lt;/h2&gt;

&lt;p&gt;Suppose I save every conversation for six months. Nothing is lost. I now ask: “What did we decide about payment retries?”&lt;/p&gt;

&lt;p&gt;The database can search for the words “payment retries.” But the decision may have been written as: “If the card fails, wait and try again, but only twice.” The meaning matches. The words do not.&lt;/p&gt;

&lt;p&gt;A conventional keyword lookup finds what matches. Memory has to find what means the same thing.&lt;/p&gt;

&lt;p&gt;That is where vectors enter.&lt;/p&gt;

&lt;p&gt;A vector is a position on a map of meaning. Put “king” and “queen” on that map and they should sit near each other. Put “pizza” on it and it should sit elsewhere. A real map has hundreds of directions, sometimes more than a thousand, because the system needs enough room to separate fine shades of meaning. You do not need to picture every direction. The useful idea is simply that related text receives nearby coordinates.&lt;/p&gt;

&lt;p&gt;An embedding is the operation that produces those coordinates. Text goes in. A position comes out. People often use “embedding” and “vector” as if they mean the same thing. In casual discussion that is harmless. Technically, the vector is the position; embedding is the process of working out that position.&lt;/p&gt;

&lt;p&gt;Once stored text has positions, “payment retry logic” can land near “if the card fails, wait and try again.” Retrieval no longer depends on shared spelling. The system searches a neighbourhood of meaning.&lt;/p&gt;

&lt;p&gt;That is semantic search. It is necessary. It is not sufficient.&lt;/p&gt;

&lt;p&gt;There is also an operational trap here. The map is not universal. Different embedding models draw different maps. Change the embedding model and you change the coordinate system used to interpret stored material. The underlying memories did not change, but the ground beneath their positions did. Any production memory design has to treat embedding choice and migration as system concerns, not as a hidden implementation detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three holes in vectors alone
&lt;/h2&gt;

&lt;p&gt;Vector search looks so convincing in a demo that teams mistake it for the whole system. It fails in three predictable ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  Similar is not the same
&lt;/h3&gt;

&lt;p&gt;Compare these two statements:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We decided to retry twice.&lt;/p&gt;

&lt;p&gt;We considered retrying twice and rejected it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They use almost identical language. Their vectors can sit close together. Their operational meanings are opposite. Distance can tell us that both concern the same subject. Distance alone cannot tell us which decision became valid.&lt;/p&gt;

&lt;p&gt;This is why a nearest-neighbour result is a candidate, not an answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vectors have no clock
&lt;/h3&gt;

&lt;p&gt;Imagine that a team says in March, “We use Postgres.” In June, the team migrates. In July, an agent asks memory which database the project uses.&lt;/p&gt;

&lt;p&gt;Both statements can be semantically relevant. The March statement may even be a closer wording match. But it is no longer current. A vector does not understand that March preceded June or that a later fact superseded an earlier one.&lt;/p&gt;

&lt;p&gt;Time cannot be pasted on as decorative metadata. It has to participate in ingestion, contradiction detection, invalidation, retrieval, and ranking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proximity is not a relationship
&lt;/h3&gt;

&lt;p&gt;Vectors tell us which things are near one another. They do not tell us that a bug came from a decision made in a meeting by a particular person, or that a workaround belongs to a specific release and was retired by a later fix.&lt;/p&gt;

&lt;p&gt;Those are edges, not distances.&lt;/p&gt;

&lt;p&gt;A useful memory system therefore needs three structures at once: a semantic map, a graph of connections, and a clock. The map finds related meaning. The graph explains how pieces relate. The clock tells the system what was true when, and whether it is still true now.&lt;/p&gt;

&lt;p&gt;That combination is the beginning of memory. A vector database by itself is still storage with an unusually good search function.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three types of memory
&lt;/h2&gt;

&lt;p&gt;The next mistake is to treat every retained item as the same kind of object. Human memory gives us a cleaner model.&lt;/p&gt;

&lt;p&gt;Episodic memory is what happened. Your first day at a job is an episode: people, place, sequence, and time belong together. In an agent system, a debugging session, a decision meeting, or a failed deployment is episodic. The timestamp is part of the event, not an optional label attached later.&lt;/p&gt;

&lt;p&gt;Semantic memory is what is true. Paris is the capital of France. You may not remember when you learned that fact because the fact survived while the original episode disappeared. In engineering work, “this service owns invoice generation” is semantic memory. It may have originated in a conversation, but the useful retained object is the claim.&lt;/p&gt;

&lt;p&gt;Procedural memory is how to do something. Riding a bicycle is the standard human example: you can perform the skill without being able to write a complete description of balance. For an AI agent, a verified workflow, a proven recovery sequence, or a reusable procedure belongs in this category.&lt;/p&gt;

&lt;p&gt;These three types have different shapes and different retrieval needs. A chat archive is mostly episodic. It records what was said and when. Calling that complete memory is like calling a server log an operating manual and a knowledge base at the same time.&lt;/p&gt;

&lt;p&gt;The distinction matters for AI Reliability Engineering because reliability depends on feeding the agent the right kind of evidence. An event can explain why a decision happened. A fact can state the current decision. A procedure can tell the agent what to do next. Flatten them into one text pile and the agent has to reconstruct those differences every time it answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a memory gets made: the seven-stage ingestion pipeline
&lt;/h2&gt;

&lt;p&gt;Storing a memory is not one write. In SuperLocalMemory v3.8.10, the ingestion path is a sequence of gates and transformations. Each stage answers a different question.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Decide whether the input is worth keeping
&lt;/h3&gt;

&lt;p&gt;Most text is not durable information. Greetings, repeated acknowledgements, transient tool noise, and duplicated context can overwhelm retrieval if everything is retained. The first stage asks whether the input carries enough information to justify its future cost.&lt;/p&gt;

&lt;p&gt;This is the role represented by &lt;code&gt;entropy_gate.py&lt;/code&gt;. The principle is plain: do not make retrieval harder by storing noise.&lt;/p&gt;

&lt;p&gt;Every accepted item will cost storage, indexing work, retrieval time, and possibly prompt tokens later. A memory system that accepts everything has avoided judgment at ingestion and pushed the entire burden into recall.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Classify what arrived
&lt;/h3&gt;

&lt;p&gt;Is the item a fact, an event, a preference, or another memory shape? Classification controls what later stages should do with it. The verified module here is &lt;code&gt;type_router.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is not filing for filing's sake. A preference may remain valid until explicitly changed. An event belongs on a timeline. A fact may contradict an existing fact. Routing lets the system apply the correct rules instead of treating every sentence as a generic chunk.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Extract the actual claim
&lt;/h3&gt;

&lt;p&gt;A paragraph is not a fact. It may contain context, hedging, alternatives, and one load-bearing assertion. &lt;code&gt;fact_extractor.py&lt;/code&gt; pulls out the claim that should be represented.&lt;/p&gt;

&lt;p&gt;Consider: “We tested three options. Redis was fastest, but because this service must survive a cold restart without another dependency, we chose the local store.” Saving the entire paragraph may be useful as an episode. The semantic claim is narrower: the service uses the local store, with a stated reason.&lt;/p&gt;

&lt;p&gt;Extraction makes the retained unit explicit enough to compare, connect, invalidate, and retrieve.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Resolve entities
&lt;/h3&gt;

&lt;p&gt;“The client,” “Rahul,” and “that customer” may refer to one entity across several months. If the system stores them as three unrelated names, it does not have one memory of the person or organisation. It has fragments that cannot reliably meet.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;entity_resolver.py&lt;/code&gt; handles this stage. Entity resolution gives later graph and retrieval operations a stable thing to point at.&lt;/p&gt;

&lt;p&gt;This is also where careless systems create false joins. Two people can share a name. A good resolver has to avoid turning linguistic similarity into identity without enough evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Parse time and validate temporal truth
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;temporal_parser.py&lt;/code&gt; attaches time. &lt;code&gt;temporal_validator.py&lt;/code&gt; checks whether the new information invalidates something already believed.&lt;/p&gt;

&lt;p&gt;This stage is what separates accumulation from learning. New information does not always sit beside old information. Sometimes it overrules it.&lt;/p&gt;

&lt;p&gt;Crucially, invalidation should not mean erasure. If the project used Postgres in March and migrated in June, the March fact was true in March. The system may need that history to explain an old incident or reproduce an earlier release. The correct state is superseded, with a timeline, not deleted as if it had never existed.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Connect the memory
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;auto_linker.py&lt;/code&gt; creates relationships to related memories, facts, entities, and events. This builds the web that vectors cannot provide.&lt;/p&gt;

&lt;p&gt;The relationship can answer questions that similarity cannot: which decision caused this change, which event confirmed a claim, which person owns the component, or which procedure resolved the incident.&lt;/p&gt;

&lt;p&gt;The graph is valuable because reasoning often travels through a connection. A question may not resemble the target memory closely in vector space, but an entity or event path can still lead to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Consolidate
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;consolidator.py&lt;/code&gt; performs the final stage. Human memory does not keep every sensory detail forever. Repeated episodes become patterns; details fade while a useful summary remains.&lt;/p&gt;

&lt;p&gt;An artificial memory system needs the same discipline. Without consolidation, it grows into a warehouse of near-duplicates. The retrieval problem becomes harder with every accepted item, even if every item was reasonable on its own.&lt;/p&gt;

&lt;p&gt;Consolidation turns accumulated experience into something more compact and reusable. It is not deletion with a nicer name. It is the conversion of repeated or related material into a stronger representation while preserving what remains important.&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%2F6tfxa0vj82mfvcoig2yd.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%2F6tfxa0vj82mfvcoig2yd.png" alt="The seven-stage memory ingestion pipeline from raw input to a connected, consolidated fact" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How memory comes back: six channels, fusion, and re-ranking
&lt;/h2&gt;

&lt;p&gt;When a user asks a question, a capable memory system does not run one search. It runs several searches in parallel because relevance has more than one shape.&lt;/p&gt;

&lt;p&gt;SuperLocalMemory v3.8.10 has six verified retrieval channel modules.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;semantic_channel.py&lt;/code&gt; searches the meaning map. This is the vector path. It finds material that expresses related ideas even when the wording differs.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bm25_channel.py&lt;/code&gt; searches keywords. Semantic retrieval did not make literal text useless. Exact names, error strings, identifiers, and rare terms often need lexical search.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;entity_channel.py&lt;/code&gt; retrieves around a person, project, customer, component, or other resolved entity. It answers “what do we know about this thing?” even when the individual memories use different language.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;temporal_channel.py&lt;/code&gt; searches by time. It can prefer the relevant period and help distinguish current truth from historical truth.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;hopfield_channel.py&lt;/code&gt; follows connections. It uses the web rather than only the map, letting retrieval reach related material through stored relationships.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;profile_channel.py&lt;/code&gt; applies scope. It keeps retrieval inside the active world instead of allowing a relevant-looking memory from the wrong project or identity to leak into the answer.&lt;/p&gt;

&lt;p&gt;These six channels will disagree. That is expected. Each produces scores with its own meaning and scale. A semantic similarity score cannot be averaged naively with a keyword score or a graph score.&lt;/p&gt;

&lt;p&gt;The verified &lt;code&gt;fusion.py&lt;/code&gt; module uses Weighted Reciprocal Rank Fusion. The important move is to combine rank positions rather than pretend raw scores are comparable. Each channel returns an ordered list. Fusion rewards candidates that appear strongly across several lists, with weights reflecting the channels trusted for the query. In the current verified implementation, the default fusion constant is &lt;code&gt;k=15&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This gives the system a useful property: a memory that appears partway down several independent lists can beat a memory that appears first in only one. Agreement across retrieval views becomes evidence.&lt;/p&gt;

&lt;p&gt;Fusion still produces candidates, not final truth. The first stages are designed to be broad and fast. The last stage can spend more compute on fewer items.&lt;/p&gt;

&lt;p&gt;That is the job of &lt;code&gt;reranker.py&lt;/code&gt;: a subprocess-isolated cross-encoder reads the question and each top candidate together, then judges whether the candidate actually answers the question. Unlike the original vector lookup, this model gets to inspect the relationship between query and candidate directly.&lt;/p&gt;

&lt;p&gt;The order matters. Running the expensive judge over the full store would be wasteful. Running only fast retrieval would leave too many semantic near-misses. Broad retrieval narrows the field. Fusion combines different kinds of evidence. Re-ranking performs the careful final selection.&lt;/p&gt;

&lt;p&gt;There is a useful scar in the code: an earlier fusion version re-fused results three times and destroyed the rankings. That detail is more instructive than a perfect architecture diagram. Retrieval components do not become correct merely because each one sounds reasonable. Their composition has to be measured.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forgetting is a requirement, not a defect
&lt;/h2&gt;

&lt;p&gt;A thought experiment makes the scaling problem obvious. Imagine a store with a million memories. This is not a claimed benchmark or measured capacity result. It is a way to expose what breaks.&lt;/p&gt;

&lt;p&gt;Every retained memory is another candidate that can look relevant. A useful result can be buried under a large number of things that resemble it. Perfect retention therefore does not produce perfect recall. It can produce noise.&lt;/p&gt;

&lt;p&gt;Deleting by age is not enough. An architecture decision from a year ago may still govern the system. A message from minutes ago may already be worthless. Age and importance are different variables.&lt;/p&gt;

&lt;p&gt;SuperLocalMemory couples two mechanisms to deal with this problem.&lt;/p&gt;

&lt;p&gt;The first is the Ebbinghaus forgetting curve. Ebbinghaus's work dates to 1885. The shape is the point: forgetting is steep early and then flattens. In the verified coupling code, retention contributes to forgetting drift as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lambda_forget = (1 - R) * forgetting_drift_scale
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The curve tells the system how memory fades over time. It does not, alone, tell the system which memory deserves to resist that fade.&lt;/p&gt;

&lt;p&gt;The second mechanism couples Fisher confidence to Langevin dynamics. Picture a memory as a particle moving within a boundary. If it reaches the boundary, it is archived. Temperature controls how strongly that particle moves.&lt;/p&gt;

&lt;p&gt;The conceptual relationship is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T_eff = T0 / confidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The implementation adds an epsilon guard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T_eff = T_0 / (fisher_confidence + epsilon)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;High confidence makes the denominator larger, so effective temperature drops. The memory moves less and stabilises toward the active region. Low confidence makes effective temperature higher. The memory moves more and drifts toward archival.&lt;/p&gt;

&lt;p&gt;The two mechanisms are coupled. The verified implementation combines Fisher temperature and Ebbinghaus forgetting drift as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T_combined = T_fisher * (1 + lambda_forget)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives the system a way to forget without a hand-written cleanup schedule deciding each record's fate. Confident memories stabilise. Uncertain memories are more likely to fade. The resulting behaviour is based on both time and learned confidence, not on “delete everything older than this date.”&lt;/p&gt;

&lt;p&gt;That distinction is central to AI Reliability Engineering. Forgetting is safe only when it is governed, inspectable, and coupled to evidence about usefulness. An unbounded store is unreliable because noise grows. A blunt retention rule is unreliable because it can remove old but governing knowledge. The system needs controlled decay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Temporal invalidation: preserve history without serving stale truth
&lt;/h2&gt;

&lt;p&gt;Forgetting and invalidation solve different problems.&lt;/p&gt;

&lt;p&gt;Forgetting manages value under scale. Invalidation manages truth under change.&lt;/p&gt;

&lt;p&gt;Return to the database example. “We use Postgres” was true in March. A later migration makes another statement true in June. If both facts remain active with equal standing, the memory system can retrieve obsolete architecture with complete confidence.&lt;/p&gt;

&lt;p&gt;The wrong fix is to erase March. Historical questions still need it. An incident from April may make sense only under the old architecture.&lt;/p&gt;

&lt;p&gt;The correct model is a timeline with supersession. The earlier fact remains available as historical truth, while the later fact becomes current truth. Retrieval can then answer two distinct questions correctly:&lt;/p&gt;

&lt;p&gt;“What database do we use now?”&lt;/p&gt;

&lt;p&gt;“What database were we using when the April incident happened?”&lt;/p&gt;

&lt;p&gt;This is why time belongs inside the memory object and the retrieval logic. A timestamp column added after the fact does not automatically create temporal reasoning. The ingestion pipeline must detect a possible contradiction, validate it, link the new and old states, and change which one is treated as current.&lt;/p&gt;

&lt;h2&gt;
  
  
  A learning system needs a system that can stop it
&lt;/h2&gt;

&lt;p&gt;The six retrieval channels need weights. Those weights can be guessed once and frozen, or they can learn from actual recall outcomes.&lt;/p&gt;

&lt;p&gt;Learning sounds obviously better. It is also where a memory system can quietly degrade.&lt;/p&gt;

&lt;p&gt;A new ranking model may look promising on a small sample and perform worse after promotion. Without a guardrail, “self-improving” means the system is authorised to reduce its own quality without an alarm.&lt;/p&gt;

&lt;p&gt;SuperLocalMemory's verified learning discipline uses shadow testing and rollback.&lt;/p&gt;

&lt;p&gt;Queries are routed deterministically using a hash, so the same query goes to the same lane even across a daemon restart. That makes the comparison reproducible rather than random.&lt;/p&gt;

&lt;p&gt;Phase A is a fast triage at &lt;code&gt;n=100&lt;/code&gt;. Early promotion requires both a strong effect and statistical significance. If that gate is not met, Phase B continues to &lt;code&gt;n=885&lt;/code&gt; paired comparisons. That sample size is set for a minimum detectable effect of &lt;code&gt;0.02&lt;/code&gt;, power &lt;code&gt;0.8&lt;/code&gt;, two-sided alpha &lt;code&gt;0.05&lt;/code&gt;, and sigma &lt;code&gt;0.15&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Promotion is not the end of validation. The next &lt;code&gt;200&lt;/code&gt; recalls are watched against the pre-promotion baseline. If mean &lt;code&gt;NDCG@10&lt;/code&gt; drops by at least &lt;code&gt;2%&lt;/code&gt;, the system automatically rolls back. The model flag changes happen in one &lt;code&gt;BEGIN IMMEDIATE&lt;/code&gt; transaction, and retraining is disabled for &lt;code&gt;24h&lt;/code&gt; after rollback so the system cannot immediately repeat the same failure.&lt;/p&gt;

&lt;p&gt;There is also a defined failure path for a missing previous model. The code does not demote the active model and leave the user with nothing. It logs the error, enters safe mode, and falls back to the Phase-2 heuristic.&lt;/p&gt;

&lt;p&gt;This is the pattern I care about: learning is allowed only inside a reversible control loop.&lt;/p&gt;

&lt;p&gt;The numbers are not decoration. &lt;code&gt;n=100&lt;/code&gt; is triage, not final proof. &lt;code&gt;n=885&lt;/code&gt; is the full paired validation under the stated power and significance assumptions. &lt;code&gt;200&lt;/code&gt; is the post-promotion watch. A &lt;code&gt;2%&lt;/code&gt; mean &lt;code&gt;NDCG@10&lt;/code&gt; drop is the rollback threshold. Each number corresponds to a different failure mode.&lt;/p&gt;

&lt;p&gt;Anyone can add retraining. Reliable systems define what evidence permits promotion, what evidence triggers reversal, and what happens when reversal itself cannot complete normally.&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%2Fdza5mu0lqs5yo92w4vqt.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%2Fdza5mu0lqs5yo92w4vqt.png" alt="Two competing ranking models running in shadow, one promoted forward, the other rolled back" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Profile isolation: walls at the record level
&lt;/h2&gt;

&lt;p&gt;Memory becomes dangerous when several worlds share one system.&lt;/p&gt;

&lt;p&gt;Client project. Personal project. Day job. A query in one should not retrieve a plausible answer from another. Semantic relevance does not grant permission.&lt;/p&gt;

&lt;p&gt;SuperLocalMemory's verified profile model scopes every memory, fact, entity, and learning record with &lt;code&gt;profile_id&lt;/code&gt;. The boundary exists at the record level, including the learning data, rather than only at the conversation or interface level.&lt;/p&gt;

&lt;p&gt;This is columnar isolation, not separate stores. That distinction matters because the wrong mental model leads to the wrong operational claims.&lt;/p&gt;

&lt;p&gt;Switching profiles is config-only and moves zero data. Records stay where they are. The active profile changes which scoped records the system can operate on. There is no copy, export, or migration during a switch.&lt;/p&gt;

&lt;p&gt;The design rule is private by default and shared only by an explicit scope decision. If a memory that should have been shared remains private, the failure is reduced availability and can be corrected. If a private memory leaks into another profile, the failure may be irreversible.&lt;/p&gt;

&lt;p&gt;At organisational scale, profile isolation is only part of the boundary. Role-based access determines who may read, write, delete, or inspect the audit trail. Retrieval quality cannot compensate for weak access control. A highly relevant result from the wrong profile is still the wrong result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caching and compression: the unglamorous economics
&lt;/h2&gt;

&lt;p&gt;Memory costs compute when text is embedded. It costs time during retrieval. It costs prompt tokens when retrieved material is injected into a model call.&lt;/p&gt;

&lt;p&gt;Two practical levers control that cost.&lt;/p&gt;

&lt;p&gt;First, do not repeat work. Exact caching can reuse a result for the same question. Semantic caching can reuse work when differently worded questions mean the same thing. The verified cache modules cover exact and semantic paths, centroid storage, invalidation, and stampede control: &lt;code&gt;exact.py&lt;/code&gt;, &lt;code&gt;semantic.py&lt;/code&gt;, &lt;code&gt;centroid_store.py&lt;/code&gt;, &lt;code&gt;invalidation.py&lt;/code&gt;, and &lt;code&gt;stampede.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cache invalidation matters because memory changes. A cached answer that ignores a newly superseding fact is fast and wrong. The cache has to participate in the same truth lifecycle as the underlying memory.&lt;/p&gt;

&lt;p&gt;Second, reduce what is sent. Retrieved memories are prose, and prose can be compressed while retaining the useful meaning. The verified compression path includes &lt;code&gt;ccr.py&lt;/code&gt;, &lt;code&gt;prose_llmlingua.py&lt;/code&gt;, &lt;code&gt;router.py&lt;/code&gt;, and &lt;code&gt;align.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I am deliberately not attaching a compression ratio or cache hit rate. Those figures were not verified in the source material for this article. The engineering point does not need an invented percentage: repeated retrieval wastes compute, and verbose context consumes tokens on every call.&lt;/p&gt;

&lt;p&gt;Caching prevents repeated work. Compression reduces the payload. Both become more important as memory stops being a demo and becomes infrastructure used every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-agent shared memory
&lt;/h2&gt;

&lt;p&gt;Most developers no longer use one AI surface. An editor agent, a terminal agent, and a background process may all touch the same project. Without shared state, each works from a partial view. One can repeat a failed approach. Another can undo a decision made minutes earlier. The human becomes the message bus between tools.&lt;/p&gt;

&lt;p&gt;Putting memory below the agents changes that shape.&lt;/p&gt;

&lt;p&gt;An agent records a verified decision into the shared layer. Another agent retrieves it through the same scoped system. The memory is not trapped inside either agent's private transcript. SuperLocalMemory's verified mesh modules include &lt;code&gt;mesh/broker.py&lt;/code&gt; and &lt;code&gt;mesh/remote_sync.py&lt;/code&gt; for this shared-memory direction.&lt;/p&gt;

&lt;p&gt;Shared does not mean unbounded. The profile and permission rules still apply. The value is that authorised agents can coordinate through one memory layer instead of maintaining conflicting local histories.&lt;/p&gt;

&lt;p&gt;This is also why memory belongs outside the model. Models and tools can change. A durable memory layer can serve several agents while keeping the truth lifecycle, retrieval pipeline, isolation policy, and learning controls consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reference implementation
&lt;/h2&gt;

&lt;p&gt;Memory is not storage. Storage is the easy part.&lt;/p&gt;

&lt;p&gt;Memory is the system that decides what deserves to survive, what kind of thing it is, which entity it belongs to, when it was true, what it connects to, whether it has been superseded, how confidently it should remain active, which profile may see it, and whether it actually earned its place in an answer.&lt;/p&gt;

&lt;p&gt;That is a large claim, so I prefer an implementation you can inspect over a diagram you have to trust.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/qualixar/superlocalmemory" rel="noopener noreferrer"&gt;SuperLocalMemory&lt;/a&gt; is the open-source reference implementation for the architecture described here. The verified source for this article is v3.8.10: the seven-stage ingestion path, six retrieval channels, Weighted Reciprocal Rank Fusion, cross-encoder re-ranking, Ebbinghaus and Fisher-Langevin forgetting, deterministic shadow tests, automatic rollback, per-record &lt;code&gt;profile_id&lt;/code&gt; isolation, cache and compression modules, and shared-memory mesh components.&lt;/p&gt;

&lt;p&gt;This is what AI Reliability Engineering looks like at the memory layer: not a promise that the model will remember, but a set of explicit mechanisms for deciding what memory means, measuring whether recall improved, and recovering when it did not.&lt;/p&gt;

&lt;p&gt;Read the code. The scars are part of the design.&lt;/p&gt;

</description>
      <category>aireliabilityengineering</category>
      <category>aimemory</category>
      <category>superlocalmemory</category>
      <category>persistentmemory</category>
    </item>
    <item>
      <title>MCP Went Stateless. State Did Not Disappear.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Fri, 31 Jul 2026 15:07:13 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/mcp-went-stateless-state-did-not-disappear-b68</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/mcp-went-stateless-state-did-not-disappear-b68</guid>
      <description>&lt;p&gt;On 28 July 2026, the Model Context Protocol removed its handshake, retired its protocol-level sessions, and stopped requiring servers to remember clients between requests.&lt;/p&gt;

&lt;p&gt;The easy headline is that MCP went stateless. The wrong conclusion is that state went away.&lt;/p&gt;

&lt;p&gt;It did not. State moved.&lt;/p&gt;

&lt;p&gt;Some of it now travels with each request. Some of it becomes an explicit handle passed as a normal tool argument. Long-lived continuity—what happened on Monday, what failed last week, what the agent already learned—belongs above the transport in a memory layer owned by the caller or the surrounding system.&lt;/p&gt;

&lt;p&gt;That distinction matters because MCP has spent the spring being declared dead for reasons that mixed a real context-cost problem, a badly repeated token number, and a quieter distributed-systems flaw. The context problem remains real. The distributed-systems flaw is what the &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;2026-07-28 specification&lt;/a&gt; directly attacked.&lt;/p&gt;

&lt;p&gt;I want to explain the whole chain from zero: why MCP exists, how the “MCP is dead” narrative acquired a number it could not honestly support, why sticky sessions were a bigger enterprise problem than the commentary suggested, what the specification changed, and what an engineering team should migrate now.&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%2Fyhierltdga53ogkgvx4j.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%2Fyhierltdga53ogkgvx4j.png" alt="Tangled M-by-N connections resolving into one shared interface" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP from zero: the M-by-N connection problem
&lt;/h2&gt;

&lt;p&gt;Start with an AI system on one side and the systems it needs on the other.&lt;/p&gt;

&lt;p&gt;The AI may need to read a repository, inspect an issue, query a database, retrieve a design file, search internal documentation, or call an operational tool. Capability is not the same as access. A model can reason about a bug while still being unable to see the error report that contains the decisive evidence.&lt;/p&gt;

&lt;p&gt;Before a shared protocol, every model vendor and every tool provider could build a custom connection. If there are M AI clients and N external systems, the naive integration surface is M multiplied by N. Three clients and ten tools produce thirty separate connections. Authentication, schemas, errors, retries, capability discovery, and version drift can all behave differently across those connections.&lt;/p&gt;

&lt;p&gt;That is the actual problem MCP addresses.&lt;/p&gt;

&lt;p&gt;MCP does not make the model smarter. It does not replace the external API. It does not make permissions disappear. It defines a common interface through which an AI client can discover and invoke tools or retrieve context. The tool provider implements the MCP-facing door once. Compatible clients can use the same shape instead of demanding another proprietary bridge.&lt;/p&gt;

&lt;p&gt;This is why “just use APIs” is not a rebuttal. MCP servers usually reach real APIs, databases, filesystems, or services underneath. The protocol standardizes how an AI client encounters those capabilities. REST can be part of the implementation, but an estate of unrelated REST endpoints is not, by itself, a shared agent-tool contract.&lt;/p&gt;

&lt;p&gt;Anthropic released MCP, but ownership did not remain an Anthropic-only story. On 9 December 2025, MCP was donated to the Agentic AI Foundation, a directed fund under the Linux Foundation, co-founded by Anthropic, Block, and OpenAI, with backing that included Google, Microsoft, AWS, Cloudflare, and Bloomberg. The precise wording matters: a foundation under the Linux Foundation, not a protocol “run by” the Linux Foundation.&lt;/p&gt;

&lt;p&gt;That broader stewardship did not guarantee that the original design would scale. Standards earn trust by changing when deployed systems expose the wrong abstraction. MCP had two separate problems to confront: tool-schema cost and transport-level state.&lt;/p&gt;

&lt;p&gt;The internet compressed those into one obituary. They should never have been treated as one issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  How “MCP is dead” became the spring narrative
&lt;/h2&gt;

&lt;p&gt;An MCP client needs to know which tools are available and how to call them. Tool definitions include names, descriptions, parameters, and constraints. Put enough definitions into a model context and the menu starts consuming the meal.&lt;/p&gt;

&lt;p&gt;The measured range in the approved research for this piece is 550 to 1,400 tokens per tool definition. Connect GitHub, Slack, and Sentry in the configuration examined by Apideck, and the setup reaches roughly forty tools. Apideck’s own stated total for that setup is 55,000 tokens before the user’s real work has had a chance to begin.&lt;/p&gt;

&lt;p&gt;That is not a cosmetic inefficiency. It is context occupied by descriptions of possible actions, including actions the model may never use. It can reduce the room available for the task, the evidence, the conversation, and the answer. It can also make every call carry a cost that has little relationship to the one tool actually needed.&lt;/p&gt;

&lt;p&gt;Then came the number that turned a technical complaint into a spring headline: 72%.&lt;/p&gt;

&lt;p&gt;In March, Perplexity’s CTO said on stage that the company was moving away from MCP internally and referred to 72% of the context window being consumed by tool definitions. The statement spread. Y Combinator’s CEO amplified it. “MCP is dead” became a compact take that travelled faster than its provenance.&lt;/p&gt;

&lt;p&gt;I followed the number backward because 72% is precise enough to demand a precise denominator, tool set, context window, and measurement procedure. I could not source it cleanly as a Perplexity measurement.&lt;/p&gt;

&lt;p&gt;The trail led to Apideck, a company that sells an alternative to MCP. That commercial position does not make its measurements false. It does make provenance important. The problem is that Apideck’s own post does not say the GitHub, Slack, and Sentry setup costs 143,000 tokens. It says 55,000 tokens for that roughly forty-tool setup. The 143,000-token figure appears separately as a report attributed elsewhere.&lt;/p&gt;

&lt;p&gt;Those are two different examples.&lt;/p&gt;

&lt;p&gt;At least one widely shared report welded them into one sentence: the named three-server setup, the 143,000-token total, and the 72% claim became one apparently coherent fact. Once fused, the sentence was easy to quote and hard to question. I nearly repeated it myself. It was already in my notes before I checked the underlying claims against each other.&lt;/p&gt;

&lt;p&gt;The correction does not rescue the old tool-loading model. It makes the criticism more credible.&lt;/p&gt;

&lt;p&gt;55,000 tokens for GitHub, Slack, and Sentry is Apideck’s own number. It is enough to demonstrate the problem. The 143,000 figure is a separate, mis-cited report in this provenance chain. The 72% claim cannot be cleanly presented as a Perplexity benchmark from the approved evidence. Repeating the fused version would make a valid engineering concern rest on a claim that does not survive inspection.&lt;/p&gt;

&lt;p&gt;This is a good example of AI Reliability Engineering applied to technical communication. Do not ask only whether a number sounds plausible. Ask which entity measured it, which configuration it describes, where the denominator came from, and whether the cited source says what the summary claims it says.&lt;/p&gt;

&lt;p&gt;Cloudflare provides stronger primary evidence for the large-tool case because its repository publishes the comparison directly. Its API surface contains 2,594 tools. Putting the raw OpenAPI specification into the prompt is approximately 2,000,000 tokens. Native MCP with full schemas is 1,170,523 tokens. Native MCP reduced to required parameters is 244,047 tokens. Cloudflare’s code-mode approach exposes three tools and uses approximately 1,100 tokens. &lt;a href="https://github.com/cloudflare/mcp" rel="noopener noreferrer"&gt;The table and implementation are in Cloudflare’s MCP repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Against a 200,000-token context window, the raw specification, full native schemas, and the 244,047-token minimal form do not fit. Code mode does. This is also where the widely repeated 244x comparison needs care: it compares code mode with the already reduced 244,047-token native MCP form, not with the approximately 2,000,000-token raw specification.&lt;/p&gt;

&lt;p&gt;The lesson is narrower than “MCP is dead.” Eagerly loading a large tool catalogue into the model context is the wrong discovery strategy at that scale. The transport standard and the prompt-loading policy are related, but they are not identical. You can keep a common protocol while changing discovery, filtering, search, tool grouping, deferred schema loading, or code execution around it.&lt;/p&gt;

&lt;p&gt;There is a second correction worth making. Perplexity moving away from MCP internally did not mean Perplexity stopped supporting MCP externally. The approved research found that it still operated an MCP server for outside developers. “One company changed an internal transport choice” and “the protocol is dead” are not equivalent statements.&lt;/p&gt;

&lt;p&gt;The token problem was loud because it appeared inside the model bill and the context meter. The state problem was less visible. It was also the one that directly constrained how MCP servers could be deployed behind ordinary enterprise infrastructure.&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%2Fspy4racr68ejg2p8nvxk.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%2Fspy4racr68ejg2p8nvxk.png" alt="A load balancer freely routing across interchangeable server instances instead of one pinned server" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The enterprise blocker hiding behind sticky sessions
&lt;/h2&gt;

&lt;p&gt;Imagine a food-delivery request. This is an analogy, not a claim about any named company’s architecture.&lt;/p&gt;

&lt;p&gt;The caller sends a request through a load balancer. Behind it are multiple server instances. The load balancer should be free to send each request to an available healthy instance. That is how traffic spreads, failed instances are bypassed, and capacity is added or removed.&lt;/p&gt;

&lt;p&gt;The old MCP interaction was stateful at the protocol level. The client initialized a connection. The server returned a session identifier. Later requests used the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; header so the server could recover what it had stored about that interaction.&lt;/p&gt;

&lt;p&gt;Now place that state in the memory of server instance one.&lt;/p&gt;

&lt;p&gt;Instance one recognizes the session. Instances two and three do not. The load balancer can no longer route freely unless the state is replicated elsewhere. It must keep sending that client back to instance one. That is a sticky session.&lt;/p&gt;

&lt;p&gt;Sticky sessions are not automatically broken engineering. They are sometimes a reasonable local optimization. They become a protocol tax when every compliant deployment inherits them even though the application does not need conversational state inside the transport.&lt;/p&gt;

&lt;p&gt;The costs are familiar to anyone who has operated distributed services. One instance can receive a disproportionate share of active sessions while another has spare capacity. If the pinned instance fails, in-memory session state can fail with it. Scaling down becomes harder because an instance may still own live sessions. Serverless and edge execution become awkward because workers are expected to be disposable. A protocol that assumes the same server will remember the client fights the infrastructure instead of using it.&lt;/p&gt;

&lt;p&gt;You can work around this by externalizing the session store. Redis is a common shape for that solution: every server instance reads and writes shared session data, so any instance can reconstruct the interaction. But now the transport has required a database, network calls, expiry policy, failover design, consistency decisions, and operational cost merely to preserve a protocol-level conversation.&lt;/p&gt;

&lt;p&gt;That was the real enterprise scaling constraint.&lt;/p&gt;

&lt;p&gt;The context problem asks, “How much tool description should enter the model?” The sticky-session problem asks, “Can any healthy server instance handle the next request?” One is prompt architecture. The other is distributed-systems architecture. Solving one does not solve the other.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;MCP project’s 2026-07-28 release&lt;/a&gt; attacked the second problem by removing the session assumption from the core request path.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed on 2026-07-28
&lt;/h2&gt;

&lt;p&gt;The specification moved MCP from a bidirectional stateful protocol to a stateless request/response model. &lt;a href="https://claude.com/blog/bringing-mcp-2026-07-28-to-claude" rel="noopener noreferrer"&gt;Anthropic’s implementation note&lt;/a&gt; states the operational result directly: servers can deploy on serverless and edge infrastructure.&lt;/p&gt;

&lt;p&gt;The old &lt;code&gt;initialize&lt;/code&gt; and &lt;code&gt;notifications/initialized&lt;/code&gt; exchange is retired. The &lt;code&gt;Mcp-Session-Id&lt;/code&gt; header is retired. Protocol-level sessions are gone from the Streamable HTTP transport.&lt;/p&gt;

&lt;p&gt;Instead of negotiating identity and capabilities once and expecting the server to remember them, every request carries its protocol version, client identity, and client capabilities in &lt;code&gt;_meta&lt;/code&gt;. The request becomes self-describing enough for any compatible instance to process it.&lt;/p&gt;

&lt;p&gt;That changes the load-balancer picture. Request one can reach instance one. Request two can reach instance three. If instance one disappears, the caller is not bound to a protocol session that died with it. Capacity can scale horizontally without teaching the load balancer which client belongs to which worker.&lt;/p&gt;

&lt;p&gt;This is the stateless-server pattern used across resilient request/response systems: make workers interchangeable, move required request context across the boundary, and make durable state explicit. The benefit is not that the system has no state. The benefit is that an arbitrary worker does not secretly own it.&lt;/p&gt;

&lt;p&gt;GitHub provides the strongest implementation receipt in the approved evidence. Ahead of the specification date, the company updated the GitHub MCP Server, &lt;a href="https://github.blog/changelog/2026-07-23-github-mcp-server-supports-the-next-mcp-specification/" rel="noopener noreferrer"&gt;removed Redis sessions, and eliminated database operations&lt;/a&gt;. GitHub said the result made the server snappier without users losing anything.&lt;/p&gt;

&lt;p&gt;Read that change literally. A protocol redesign allowed a major implementation to delete its session store. That is stronger evidence than a diagram or a promise. The store was serving transport state that the new contract no longer required.&lt;/p&gt;

&lt;p&gt;The specification also changed adjacent parts of the protocol.&lt;/p&gt;

&lt;p&gt;Roots, Sampling, and Logging are deprecated. They still work, and the MCP deprecation policy keeps deprecated features in the specification for at least twelve months before they become eligible for removal. The legacy HTTP+SSE transport is also officially deprecated. I am deliberately not attaching an unverified SEP number to that statement because the approved research found the deprecation in primary evidence but its proposal identifier only in a secondary source.&lt;/p&gt;

&lt;p&gt;The Tasks extension also moved away from a blocking result call. The blocking &lt;code&gt;tasks/result&lt;/code&gt; method was replaced by polling through &lt;code&gt;tasks/get&lt;/code&gt;, with &lt;code&gt;tasks/update&lt;/code&gt; part of the task interface. That fits the same direction: long-running work should have an explicit resource and lifecycle, not depend on an open transport interaction pretending to be durable state.&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%2Fvef23x43zva062cwladr.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%2Fvef23x43zva062cwladr.png" alt="State relocating upward from the transport layer into caller-owned orchestration and durable memory" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stateless does not mean memoryless
&lt;/h2&gt;

&lt;p&gt;This is the point I expect teams to get wrong.&lt;/p&gt;

&lt;p&gt;The state did not disappear. It moved out of an implicit server-side protocol session.&lt;/p&gt;

&lt;p&gt;Immediate request context now travels in the request. The protocol version, client identity, and client capabilities live in &lt;code&gt;_meta&lt;/code&gt;. Any stateless server instance can read them without recovering a prior handshake.&lt;/p&gt;

&lt;p&gt;Long-running server work can be represented by explicit server-issued handles passed as ordinary tool arguments. A later request presents the handle. The server can find the named task or resource without treating the whole client relationship as one opaque session. Polling through &lt;code&gt;tasks/get&lt;/code&gt; makes that ownership visible in the interface.&lt;/p&gt;

&lt;p&gt;Caller continuity remains the caller’s responsibility. If an agent needs to remember an architectural decision from Monday, a failed approach from last week, or a preference established three sessions ago, none of that belongs in &lt;code&gt;Mcp-Session-Id&lt;/code&gt;. It needs a durable system above the protocol: application storage, an orchestration layer, a memory service, or another explicit source of truth.&lt;/p&gt;

&lt;p&gt;Those forms of state have different lifetimes and should not be collapsed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Request state exists so one call can be understood and authorized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Task state exists so a named unit of long-running work can be inspected or resumed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interaction state exists so a workflow can coordinate multiple calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Durable memory exists so knowledge can survive after the workflow ends.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Old protocol sessions made it tempting to hide several of these behind one identifier and one server-side store. The stateless specification forces the architecture to name them.&lt;/p&gt;

&lt;p&gt;That is healthy pressure. Hidden state is easy to create and hard to operate. Explicit state has an owner, a schema, a lifecycle, a retention policy, and a failure mode that can be tested.&lt;/p&gt;

&lt;p&gt;It is also where AI Reliability Engineering becomes concrete. Reliable agent systems do not merely “have memory.” They separate transport metadata from task progress, task progress from workflow state, and workflow state from durable knowledge. Each layer gets the storage and recovery guarantees it actually needs.&lt;/p&gt;

&lt;p&gt;I currently federate thirty enabled MCP servers behind one gateway. That count was measured from the gateway configuration on 30 July 2026. A stateless transport underneath that gateway is the correct design because the individual servers should be replaceable. Cross-request continuity belongs in the shared layer above them, where it can be retrieved independently of which server handles the next tool call.&lt;/p&gt;

&lt;p&gt;That architecture made the specification change unsurprising rather than disruptive. I was not relying on a transport session to act as durable memory.&lt;/p&gt;

&lt;p&gt;There is still no free win. Moving state to the request can increase payload size. Moving long tasks to explicit handles requires handle storage, expiry, authorization, and cleanup. Moving durable continuity to the caller requires a real memory design instead of accidental dependence on a connection. Statelessness removes one bad coupling. It does not remove the work of state management.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical migration plan
&lt;/h2&gt;

&lt;p&gt;Do not begin migration by changing a version string and waiting for tests to fail. Begin by finding every place where the old session was doing invisible work.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Inventory the old lifecycle
&lt;/h3&gt;

&lt;p&gt;Search clients, servers, gateways, middleware, tests, and observability code for &lt;code&gt;initialize&lt;/code&gt;, &lt;code&gt;notifications/initialized&lt;/code&gt;, and &lt;code&gt;Mcp-Session-Id&lt;/code&gt;. Do not assume the SDK is the only owner. Session identifiers often leak into caches, routing rules, logs, metrics dimensions, authorization lookups, and retry code.&lt;/p&gt;

&lt;p&gt;For every hit, write down what the session was carrying. Was it only protocol version and capabilities? Was it authentication context? Was it a pointer to a long-running task? Was it storing conversation history? Was the load balancer using it for affinity?&lt;/p&gt;

&lt;p&gt;This classification is the migration. Deleting the header is mechanical. Deciding where its hidden responsibilities belong is engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Make every request self-sufficient
&lt;/h3&gt;

&lt;p&gt;Update the request boundary to read protocol version, client identity, and client capabilities from &lt;code&gt;_meta&lt;/code&gt;. Validate them at the boundary. Reject unsupported versions deliberately. Authorize the client on every request rather than assuming a previous handshake made later calls trustworthy.&lt;/p&gt;

&lt;p&gt;Then test instance interchangeability. Send related requests through different server instances. Terminate the instance that handled the first request. Confirm that another healthy instance can process the next request from the data supplied and the explicit durable stores available to it.&lt;/p&gt;

&lt;p&gt;If that test fails, the system still has hidden affinity.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Replace implicit session state with explicit handles
&lt;/h3&gt;

&lt;p&gt;For file uploads, long-running jobs, or multi-step server work, issue a handle and pass it as an ordinary tool argument. Define who minted it, which client may use it, when it expires, how it is revoked, and what happens after the underlying work is deleted.&lt;/p&gt;

&lt;p&gt;A handle is not permission by itself. Treat it as a lookup key that still passes through authorization. Otherwise, removing server sessions can accidentally turn an unguessable-looking identifier into a bearer credential.&lt;/p&gt;

&lt;p&gt;Move task result handling from the blocking &lt;code&gt;tasks/result&lt;/code&gt; pattern to polling with &lt;code&gt;tasks/get&lt;/code&gt;. Use &lt;code&gt;tasks/update&lt;/code&gt; where the task lifecycle requires an explicit update. Test duplicate polls, delayed polls, expired handles, cancelled work, server restarts, and retries after ambiguous network failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Remove infrastructure that no longer has a job
&lt;/h3&gt;

&lt;p&gt;Do not preserve a Redis session store out of habit. First prove which data remains necessary. Then remove only the transport-session records that the new request model replaces.&lt;/p&gt;

&lt;p&gt;GitHub’s implementation is the reference outcome here: Redis sessions removed and database operations eliminated. Your application may still need Redis or another database for task state, authorization, rate limits, or durable memory. Stateless MCP does not justify deleting those. It just removes “the protocol told me to remember this connection” as a reason.&lt;/p&gt;

&lt;p&gt;Measure the result. Compare request latency, database operations, failure recovery, load distribution, and scale-down behavior before and after the migration. Reading a specification is not verification. Run the system through a load balancer and kill an instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Separate transport migration from feature deprecation
&lt;/h3&gt;

&lt;p&gt;Roots, Sampling, and Logging are deprecated, not immediately removed. The approved policy gives deprecated features at least twelve months in the specification before removal eligibility. Inventory their use, choose replacements, and schedule the work. Do not create an emergency by treating deprecation as instant deletion. Do not create future debt by ignoring it either.&lt;/p&gt;

&lt;p&gt;Treat legacy HTTP+SSE the same way. It is officially deprecated. Identify remaining clients, instrument usage, and move them to the supported transport with evidence that production traffic has followed.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Put continuity where it can survive
&lt;/h3&gt;

&lt;p&gt;Ask a blunt question: what did the team expect the MCP session to remember?&lt;/p&gt;

&lt;p&gt;If the answer includes user preferences, prior decisions, conversation history, tool outcomes, failed approaches, or cross-session plans, design a durable memory layer above MCP. Define capture, retrieval, contradiction handling, retention, tenant isolation, and deletion. A transcript dumped into a database is storage, not a reliable memory system.&lt;/p&gt;

&lt;p&gt;The correct boundary is simple to state even when it is hard to implement: MCP carries the tool interaction; the orchestration system owns the continuity of the agent using that tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Test the failure modes the new design is supposed to fix
&lt;/h3&gt;

&lt;p&gt;Put multiple stateless instances behind the actual load balancer. Vary routing. Remove an instance during work. Scale to zero where the platform supports it, then cold-start another instance. Retry the same request. Poll an existing task from a different instance. Verify authorization on each path. Confirm that logs can reconstruct the flow without a protocol session identifier.&lt;/p&gt;

&lt;p&gt;Finally, test memory separately. End the workflow, start another one, and retrieve the needed prior decision through the durable layer. That proves continuity is no longer an accidental side effect of transport affinity.&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%2F0jffbfq30n2z4vdtqnlv.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%2F0jffbfq30n2z4vdtqnlv.png" alt="The seven-stage MCP migration checklist as a single connected chain" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP versus A2A is the wrong fight
&lt;/h2&gt;

&lt;p&gt;MCP and A2A solve different edges in an agent system.&lt;/p&gt;

&lt;p&gt;MCP is how an agent reaches a tool or context source through a standard interface. A2A is how agents communicate with each other. An agent may use A2A to coordinate with another agent and MCP to let either agent query a repository, invoke an operational service, or retrieve information.&lt;/p&gt;

&lt;p&gt;Those paths can coexist in the same architecture because they are complementary, not substitutes. Replacing MCP with A2A would not remove the need for a standard agent-to-tool boundary. Replacing A2A with MCP would force peer-agent coordination through an interface designed for tools.&lt;/p&gt;

&lt;p&gt;The useful question is not which acronym wins. It is where each boundary belongs and who owns state across it.&lt;/p&gt;

&lt;p&gt;The 2026-07-28 MCP specification gives a cleaner answer for the tool boundary. The transport is stateless. Requests declare the context needed to process them. Long-running work uses explicit handles. Durable continuity lives above the protocol.&lt;/p&gt;

&lt;p&gt;The token problem is still real, and large catalogues still need better discovery than eagerly loading every schema. The 55,000-versus-143,000 provenance failure should also remain a warning: a technically plausible number is not evidence until the setup, source, and denominator match.&lt;/p&gt;

&lt;p&gt;But the sticky-session constraint changed materially. GitHub did not merely update a diagram; it removed Redis sessions and database operations from its MCP server. That is the kind of proof I trust.&lt;/p&gt;

&lt;p&gt;MCP is not dead. It has stopped asking a disposable server instance to remember what the architecture should have made explicit.&lt;/p&gt;

&lt;p&gt;That is a solid correction—and a useful one for anyone building AI systems that must fail over, scale, and remember for the right reasons.&lt;/p&gt;

</description>
      <category>aireliabilityengineering</category>
      <category>modelcontextprotocol</category>
      <category>mcp</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>I Migrated My Coding-Agent Workflow from Claude Code to Codex by Surface, Not by File</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Sat, 18 Jul 2026 06:26:39 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/i-migrated-my-coding-agent-workflow-from-claude-code-to-codex-by-surface-not-by-file-30ci</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/i-migrated-my-coding-agent-workflow-from-claude-code-to-codex-by-surface-not-by-file-30ci</guid>
      <description>&lt;p&gt;Most bad agent migrations start with a file copy.&lt;/p&gt;

&lt;p&gt;That is the wrong unit of migration.&lt;/p&gt;

&lt;p&gt;A coding-agent setup is not one configuration file. It is project instructions, MCP servers, lifecycle automation, permissions, and memory. Two clients can support all five and still implement them differently. Copying folders blindly is how you end up with a tool that starts, has too many permissions, and behaves differently at the exact moment you need it to be predictable.&lt;/p&gt;

&lt;p&gt;I moved part of my own workflow from Claude Code to Codex after GPT-5.6. The useful part was not “which model wins.” It was rebuilding the workflow in small, testable surfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Instructions: adapt, do not copy
&lt;/h2&gt;

&lt;p&gt;Take the durable rules from your project instructions: source of truth, allowed files, test command, security boundaries, and definition of done. Rewrite any client-specific command or permission language in terms of observable outcomes.&lt;/p&gt;

&lt;p&gt;The first test is not a refactor. Ask the new agent to summarize the rules, then give it a non-destructive task. If the summary or scope is wrong, the migration is not ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. MCP: port one read-only server first
&lt;/h2&gt;

&lt;p&gt;MCP is useful because it gives a model controlled access to real tools. It is not magic portability. A server may have different authentication, working-directory, approval, or write-scope behavior in another client.&lt;/p&gt;

&lt;p&gt;Start with a read-only action. Test the success path, then a bad request. Only grant a write path once its rollback and audit record are clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Hooks: migrate the outcome
&lt;/h2&gt;

&lt;p&gt;Do not look for a one-to-one hook name. Write down the outcome you wanted: restore a small task context at session start, block an unsafe action before execution, or record a useful checkpoint at stop. Then rebuild that outcome using the target client’s available lifecycle surface.&lt;/p&gt;

&lt;p&gt;The rule is simple: &lt;strong&gt;inventory → port one bounded surface → run a real task → compare output → keep or roll back.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Permissions: re-authorize
&lt;/h2&gt;

&lt;p&gt;The right migration starts read-only. Do not drag a broad allowlist into a new client simply because it worked before. Add filesystem, network, and destructive capabilities only when a bounded task proves the need.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Memory: test retrieval, not storage
&lt;/h2&gt;

&lt;p&gt;Memory is not a longer context window. It is a retrieval design: what gets stored, who can access it, what source proves it, and how you detect a stale fact.&lt;/p&gt;

&lt;p&gt;Keep the working set small: objective, files, tests, sources, assumptions. Retain only verified decisions, constraints, corrections, and source links.&lt;/p&gt;

&lt;p&gt;That is the entire playbook. It is not glamorous, but it works because every stage has a rollback point.&lt;/p&gt;

&lt;p&gt;The full guide includes the model-routing, local-MCP, and context-discipline framework: &lt;a href="https://qualixar.com/research/blog/how-i-use-codex-after-gpt-5-6" rel="noopener noreferrer"&gt;How I Use Codex After GPT-5.6&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>World Models: Why the AI Race Is Moving Beyond Next-Token Prediction</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Fri, 10 Jul 2026 15:18:33 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/world-models-why-the-ai-race-is-moving-beyond-next-token-prediction-1ekf</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/world-models-why-the-ai-race-is-moving-beyond-next-token-prediction-1ekf</guid>
      <description>&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%2F7yfw7yvsncwicpupk4u3.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%2F7yfw7yvsncwicpupk4u3.png" alt="A person facing a split world: a glowing language-model token stream on one side and a physically coherent city on the other" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the film first
&lt;/h2&gt;

&lt;p&gt;The film is the fast version of this argument. It starts with the thing most AI conversations skip: an answer can sound perfect and still be detached from the world it claims to describe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=rEzYqKIIUr4" rel="noopener noreferrer"&gt;Watch: Are LLMs a Dead End? Why AI Industry Betting on Something Bigger!&lt;/a&gt;&lt;/strong&gt;&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%2Fqwq09spiym02g8bbgepg.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%2Fqwq09spiym02g8bbgepg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is the evidence companion. It is not an obituary for large language models. I use them every day. They write, retrieve, explain, and increasingly operate software. But the moment we ask an AI system to act, a different question arrives: what does it think will happen next?&lt;/p&gt;

&lt;p&gt;That question is behind the sudden rush toward world models.&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%2Fd18fux65n92xt8w3zn6r.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%2Fd18fux65n92xt8w3zn6r.png" alt="A child's hand reaching for a coffee cup on a table, with a subtle translucent prediction path showing the cup cannot pass through the table" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The cup and the table
&lt;/h2&gt;

&lt;p&gt;Pick up a cup of coffee. Before your hand moves, your brain has already ruled out a few outcomes. The cup will not pass through the table. If you nudge it too close to the edge, it may fall. If you grab it by the handle, it will turn a particular way in your hand.&lt;/p&gt;

&lt;p&gt;You do not narrate this to yourself. You do not need to calculate a physics engine in your head. You carry a working, incomplete, constantly corrected model of what tends to happen around you.&lt;/p&gt;

&lt;p&gt;That is the intuition behind a world model. In the language used by the people building them, it is a system that tries to predict the future state of an environment and the effects of an action. A language model predicts a likely next token. These are related capabilities, but they are not the same job.&lt;/p&gt;

&lt;p&gt;The difference can sound academic until the agent has permissions. Then it becomes painfully concrete.&lt;/p&gt;

&lt;p&gt;An assistant that writes the wrong sentence can be corrected. A system that predicts the wrong database state can drop a table. A robot that predicts the wrong clearance can hit a shelf. A procurement agent that assumes an API call is idempotent can spend the same budget three times while it tells you everything is under control.&lt;/p&gt;

&lt;p&gt;That is why I do not find the current world-model discussion interesting because it promises a new category of AI. I find it interesting because it forces the industry to say what it means by understanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this race is happening now
&lt;/h2&gt;

&lt;p&gt;The phrase “world model” is suddenly everywhere, and that is usually where good thinking goes to die. It is being used for interactive video, spatial reconstruction, robotics, simulated web environments, and agent training. Those are not interchangeable products. Calling them all world models does not make them comparable.&lt;/p&gt;

&lt;p&gt;Still, there is a real shift underneath the marketing.&lt;/p&gt;

&lt;p&gt;In late May, NVIDIA introduced &lt;a href="https://developer.nvidia.com/blog/develop-physical-ai-reasoning-world-and-action-models-with-nvidia-cosmos-3" rel="noopener noreferrer"&gt;Cosmos 3&lt;/a&gt;, a foundation-model effort for physical AI that combines physical reasoning, world generation, and action generation. Its &lt;a href="https://arxiv.org/abs/2606.02800" rel="noopener noreferrer"&gt;technical report&lt;/a&gt; describes an attempt to bring these pieces into one open stack. The bet is clear: robots and autonomous systems need somewhere to rehearse consequences before the consequence arrives in the physical world.&lt;/p&gt;

&lt;p&gt;In June, Alibaba introduced the &lt;a href="https://www.alibabacloud.com/blog/entering-the-physical-ai-era-introducing-the-qwen-robot-suite_603261" rel="noopener noreferrer"&gt;Qwen-Robot Suite&lt;/a&gt;, separating manipulation, navigation, and world prediction into distinct components. Its &lt;a href="https://arxiv.org/abs/2606.17030" rel="noopener noreferrer"&gt;Qwen-RobotWorld report&lt;/a&gt; frames world modeling as part of embodied intelligence rather than a prettier form of video generation.&lt;/p&gt;

&lt;p&gt;The same move is happening in software. &lt;a href="https://arxiv.org/abs/2606.24597" rel="noopener noreferrer"&gt;Qwen-AgentWorld&lt;/a&gt; describes a language world model for agent environments such as MCP, terminal, software engineering, web, operating system, and Android. The environment is digital, but the point is familiar: tools change state. An agent should be able to practise in a representation of that state before it takes an expensive or destructive action for real.&lt;/p&gt;

&lt;p&gt;And AWS made the least flashy point, which is often the one worth keeping. In a June Physical AI post, AWS argued that pixel-plus-synthetic-data recipes are hitting limits in cost, opacity, and sim-to-real gap. Their proposed direction is a learned model whose internal representation is scene semantics, such as objects, relations, affordances, and kinematics, rather than raw pixels alone. &lt;a href="https://aws.amazon.com/blogs/physical-ai/training-world-models-on-scene-semantics-not-pixels/" rel="noopener noreferrer"&gt;Read the AWS argument.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of these announcements proves that a general-purpose world model has arrived. They prove that serious teams have started treating prediction of state and consequence as a missing layer.&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%2Fna128lcjmdyqjlx52f8k.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%2Fna128lcjmdyqjlx52f8k.png" alt="A robotics lab split into four panels: navigation, manipulation, simulation, and verification, with a human engineer observing the boundary between simulation and reality" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fluency is not a map
&lt;/h2&gt;

&lt;p&gt;There is a reason this subject needs more skepticism than excitement. A model can look as if it knows a world without carrying a stable representation of that world.&lt;/p&gt;

&lt;p&gt;The cleanest example comes from &lt;a href="https://arxiv.org/abs/2406.03689" rel="noopener noreferrer"&gt;Vafa and colleagues&lt;/a&gt;. They studied a generative model trained on New York taxi trajectories. In ordinary use, the model appeared very competent. It could produce plausible routes and reproduce shortest paths with high accuracy.&lt;/p&gt;

&lt;p&gt;Then the researchers tried to recover the map implicit in its behavior.&lt;/p&gt;

&lt;p&gt;The map was impossible.&lt;/p&gt;

&lt;p&gt;Roads and locations that should have obeyed the city’s geometry did not line up. The model had learned shortcuts that worked on familiar trajectories, not a representation that stayed coherent once the route changed. Small detours exposed the weakness.&lt;/p&gt;

&lt;p&gt;That finding matters because it is easy to fool ourselves with a system that passes the common case. The common case is where most of the training data lives. The failure case is where the model has to use the structure it claims to understand.&lt;/p&gt;

&lt;p&gt;This is not a complaint about one paper or one architecture. It is a warning about the test we choose. If you only score an agent on whether it produced a plausible action, you can miss whether it carried the state needed to keep that action safe.&lt;/p&gt;

&lt;p&gt;The usual benchmark question is: did it get the answer?&lt;/p&gt;

&lt;p&gt;The reliability question is: did it get there for a reason that still holds after the world changes?&lt;/p&gt;

&lt;p&gt;Those questions can produce the same result on a demo. They diverge in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beautiful video is not evidence of physics
&lt;/h2&gt;

&lt;p&gt;World models will make increasingly convincing worlds. Google DeepMind’s &lt;a href="https://deepmind.google/blog/genie-3-a-new-frontier-for-world-models/" rel="noopener noreferrer"&gt;Genie 3&lt;/a&gt; is a useful proof of the visual and interactive direction: it generates navigable environments from a prompt and runs them in real time. World Labs’ &lt;a href="https://www.worldlabs.ai/blog/marble-world-model" rel="noopener noreferrer"&gt;Marble&lt;/a&gt; shows another route, turning multimodal inputs into spatial worlds that can be explored and exported.&lt;/p&gt;

&lt;p&gt;Both are real technical progress. Neither should be mistaken for a proof that an AI system has solved causal understanding.&lt;/p&gt;

&lt;p&gt;A generated city can be internally consistent for long enough to impress you and still fail under the action that matters. A simulated warehouse can look correct while its object relationships are wrong. A robot can learn from a rich synthetic scene and then fail in a real room because the reflection, texture, latency, or force profile is different. This is the sim-to-real gap in a more expensive costume.&lt;/p&gt;

&lt;p&gt;The danger is not that people will be impressed by the visuals. They should be. The danger is treating visual coherence as the same thing as physical correctness.&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%2Fo9qlccr6cape5arkuz5d.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%2Fo9qlccr6cape5arkuz5d.png" alt="A beautiful generated warehouse scene with a transparent overlay exposing impossible object collisions and incorrect force arrows" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not an LLM obituary
&lt;/h2&gt;

&lt;p&gt;The title of the film asks whether LLMs are a dead end. The answer is no.&lt;/p&gt;

&lt;p&gt;Language models are extraordinarily useful. They are the right interface for asking questions, translating intent, drafting plans, retrieving context, writing code, and communicating with people. A robot does not become better because it stops using language. A world model does not eliminate the need for planning, memory, perception, tool access, or a person who owns the outcome.&lt;/p&gt;

&lt;p&gt;What changes is the architecture around the model.&lt;/p&gt;

&lt;p&gt;When an AI system stays inside a chat box, next-token prediction can carry a surprising amount of value. When it starts manipulating a browser, a terminal, a budget, a vehicle, or a robot arm, it needs more than a plausible continuation. It needs a representation of relevant state. It needs a way to check that representation against reality. It needs a policy for what to do when the two disagree.&lt;/p&gt;

&lt;p&gt;The future is probably not “LLMs versus world models.” It is layered systems. Language turns a human goal into a plan. Perception and memory provide state. A world model estimates what could happen. A verifier checks the risky part against external evidence. A bounded runtime decides whether the action is allowed to proceed.&lt;/p&gt;

&lt;p&gt;That is a less cinematic answer than “the old architecture is dead.” It is also the architecture I would want near anything I care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a world model has to prove
&lt;/h2&gt;

&lt;p&gt;The label is getting ahead of the evidence. A system should not earn the phrase “world model” because it can make a compelling video, reconstruct a room, or narrate a plan that sounds causal. Those are useful capabilities. They are not sufficient proof.&lt;/p&gt;

&lt;p&gt;I would look for four properties.&lt;/p&gt;

&lt;p&gt;First, it needs state that persists. When the system leaves a room and comes back, it should not invent a new room because a few pixels are different. When an agent writes a file, it should know that the file now exists, what it contains, and which downstream action depends on it. Persistence does not mean perfect memory. It means the model has some representation it can update instead of merely re-describing the visible moment.&lt;/p&gt;

&lt;p&gt;Second, it needs action-conditioned prediction. “What will happen next?” is too weak. The useful question is “what will happen if I do this?” A robot needs to know the difference between approaching a cup, nudging it, and lifting it. A software agent needs to know the difference between reading a migration, applying it in staging, and applying it to production. The state transition has to be conditioned on the action, not just on the previous observation.&lt;/p&gt;

&lt;p&gt;Third, it needs counterfactuals. Give the model two possible moves and it should distinguish their likely consequences before it executes either one. This is where a world model earns its keep. Without counterfactual reasoning, it is often just a history model: very good at completing the story that was already underway.&lt;/p&gt;

&lt;p&gt;Fourth, it needs calibration. A system has to know when the current state is outside what it understands. This is the one everyone leaves until the incident review. The model may be excellent at a warehouse layout it has seen a thousand times and dangerous in the first warehouse with mirrored shelving, a blocked sensor, or a forklift where it expected empty space. “I am not sure” has to be a usable output state, not a polite sentence that appears after the system has already acted.&lt;/p&gt;

&lt;p&gt;These properties are difficult to measure. That is exactly the point. If the only proof of a world model is a polished demo, we are grading the output surface, not the representation beneath it.&lt;/p&gt;

&lt;p&gt;The hard tests are boring by comparison. Take the model out of distribution. Change one relationship in the scene. Hide the object it was using as a landmark. Delay an API response. Give the software agent a stale configuration file. Change a permission after it has built its plan. Then check not only whether it succeeds, but whether it notices that its old prediction is no longer safe.&lt;/p&gt;

&lt;p&gt;That is the moment a system either has a model of the relevant world or has a habit that looked like one.&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%2F98kxfrzu3oa8wsdtfws7.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%2F98kxfrzu3oa8wsdtfws7.png" alt="A four-part technical diagram showing persistent state, action-conditioned prediction, counterfactual branches, and calibrated abstention" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A deployment test is a small world-model test
&lt;/h2&gt;

&lt;p&gt;You do not need a robot lab to apply this idea. Most software agents already act in worlds that have state: repositories, issue trackers, cloud accounts, browser sessions, deployment pipelines, and production databases.&lt;/p&gt;

&lt;p&gt;Imagine an agent asked to deploy a service.&lt;/p&gt;

&lt;p&gt;The weak version reads the task, generates a command sequence, sees a green response, and reports success. It may be fast. It may even be right nine times out of ten. But it is operating on a thin representation of the environment. It treats the deployment as a script with a happy ending.&lt;/p&gt;

&lt;p&gt;The stronger version first builds a small state model of the job. Which commit is intended? Which environment is the target? Which migration is pending? Which downstream service depends on the old schema? Is the rollback package available? Does the acting identity actually have the permission it assumes? Is the canary metric still healthy after traffic moves?&lt;/p&gt;

&lt;p&gt;Then make the test unpleasant. Give it a valid-looking but stale deployment manifest. Revoke one permission after planning. Make the health endpoint return the cached result for a few seconds. Change the target branch while the agent is waiting for an approval. A system that only knows the next command will keep going. A system that tracks state should pause, re-read the world, and revise or abandon the plan.&lt;/p&gt;

&lt;p&gt;This is not theoretical. It is the same distinction the taxi-map experiment exposed. A model can be good at the familiar path because it has seen the path. The moment the environment bends, we learn whether it has a representation or a reflex.&lt;/p&gt;

&lt;p&gt;For production agents, I would make this a release gate. Before an autonomous action receives real permissions, demonstrate that the system can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name the state assumptions it is relying on.&lt;/li&gt;
&lt;li&gt;Detect when one of those assumptions changes.&lt;/li&gt;
&lt;li&gt;Re-plan from current evidence rather than continuing the old chain of thought.&lt;/li&gt;
&lt;li&gt;Stop when the system cannot establish a safe state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is not an argument for making every agent slow and bureaucratic. It is an argument for matching the reliability mechanism to the blast radius. A research assistant browsing public pages can recover from a bad action. An agent changing billing, data, or access control should not receive the same freedom.&lt;/p&gt;

&lt;h2&gt;
  
  
  The world is larger than the model boundary
&lt;/h2&gt;

&lt;p&gt;There is another trap in this conversation. A world model does not need to contain the entire world. Neither do people. We use tools, ask questions, look again, read gauges, and defer to experts. Good systems will do the same.&lt;/p&gt;

&lt;p&gt;The mistake is treating the model boundary as the boundary of reality. It is not.&lt;/p&gt;

&lt;p&gt;For a robot, the external world includes sensors that drift, people who move unpredictably, floors that are wet, batteries that are low, and objects that were not in the training set. For a software agent, it includes rate limits, partial failures, permissions, legal rules, human intent, hidden dependencies, and systems that change while the agent is thinking.&lt;/p&gt;

&lt;p&gt;That is why reliable architectures do not ask one model to be the final authority on state. They connect model predictions to observations, retrieval, assertions, tests, and human approval where the cost of being wrong is high. The model can propose a next action. It should not be allowed to invent the evidence that makes the action safe.&lt;/p&gt;

&lt;p&gt;World models may make that proposal far better. They may let agents anticipate consequences that a pure language model misses. That is a serious opportunity. It also increases the importance of checking whether the simulated consequence agrees with the actual environment.&lt;/p&gt;

&lt;p&gt;The model is allowed to imagine. The system is responsible for verifying.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reliability test begins after the prediction
&lt;/h2&gt;

&lt;p&gt;This is where the conversation meets AI Reliability Engineering.&lt;/p&gt;

&lt;p&gt;If an agent predicts that a deployment is safe, do not grade it only on confidence. Ask what state it inspected. Which dependency versions did it read? What permission boundary did it verify? What would cause it to stop? Could another system independently prove the target environment is in the state the agent assumes?&lt;/p&gt;

&lt;p&gt;If a robot predicts that a path is clear, do not grade it only on whether the generated scene looks plausible. Change one object. Add a delay. Change the lighting. Move the obstacle after the plan was made. Watch whether the system updates its state or continues the old story.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Predict the state that matters before acting.&lt;/li&gt;
&lt;li&gt;Perturb that state in a controlled test.&lt;/li&gt;
&lt;li&gt;Verify the action against an external source of truth.&lt;/li&gt;
&lt;li&gt;Stop the loop when the evidence and the model’s assumption disagree.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That fourth step is the part teams leave out because it feels like friction. It is not friction. It is the mechanism that keeps a confident model from turning its own mistaken prediction into a real incident.&lt;/p&gt;

&lt;p&gt;This is why &lt;a href="https://github.com/qualixar/bounded-loops" rel="noopener noreferrer"&gt;bounded-loops&lt;/a&gt; exists. The agent does not get to certify its own work. An independent gate checks each lap against enforced bounds and can stop the loop. That does not repair a broken world model. It does stop the broken model from getting unlimited attempts to turn a bad assumption into damage.&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%2F9pxxrysf5sl6ki369515.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%2F9pxxrysf5sl6ki369515.png" alt="A glowing agent loop approaching an independent gate marked by concrete checks: budget, permission, state assertion, and kill switch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would want proved before I trusted a world model
&lt;/h2&gt;

&lt;p&gt;I would not begin with a benchmark leaderboard. I would begin with failure.&lt;/p&gt;

&lt;p&gt;Show me what happens when the model sees a state it has not rehearsed. Show me whether it knows its confidence has become unreliable. Show me the difference between an action that succeeds in its synthetic world and one that succeeds after the environment changes. Show me whether the system can explain which state variable changed its decision. Show me where the operator can intervene, and what happens when the operator is wrong too.&lt;/p&gt;

&lt;p&gt;The good news is that this is testable. The bad news is that the test is slower and more expensive than watching a demo.&lt;/p&gt;

&lt;p&gt;That cost is not a reason to skip it. It is the cost of allowing a model to act beyond a chat window.&lt;/p&gt;

&lt;p&gt;World models may become a major part of the next AI stack. They may also become the next category where impressive output outruns reliable behavior. Both things can be true at once. The people who win will not be the ones who declare understanding because a generated scene looks convincing. They will be the ones who can prove their systems update, abstain, and stop when the world proves them wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch, then test
&lt;/h2&gt;

&lt;p&gt;The film is about the argument. This article is about the engineering consequence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=rEzYqKIIUr4" rel="noopener noreferrer"&gt;Watch the Qualixar film on world models&lt;/a&gt;&lt;/strong&gt;, then take one agent workflow you already run and ask a hard question: what state does it assume is true before it acts, and who checks that assumption when the agent is wrong?&lt;/p&gt;

&lt;p&gt;That is the work. Not a bigger prompt. Not a more convincing status update. A system that can be tested against the world it is about to change.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm &lt;a href="https://varunpratap.com" rel="noopener noreferrer"&gt;Varun Pratap Bhardwaj&lt;/a&gt;. I build and research &lt;a href="https://qualixar.com" rel="noopener noreferrer"&gt;AI Reliability Engineering&lt;/a&gt; at Qualixar. Follow &lt;a href="https://x.com/varunPbhardwaj" rel="noopener noreferrer"&gt;@varunPbhardwaj&lt;/a&gt;, read the &lt;a href="https://www.linkedin.com/newsletters/7453495888553103360/" rel="noopener noreferrer"&gt;AI Reliability Engineering newsletter&lt;/a&gt;, and subscribe to &lt;a href="https://www.youtube.com/@qualixar-ai" rel="noopener noreferrer"&gt;Qualixar on YouTube&lt;/a&gt;.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>worldmodels</category>
      <category>physicalai</category>
      <category>aireliabilityengineering</category>
      <category>llms</category>
    </item>
    <item>
      <title>Agents Lie About Being Done. Here's the Gate That Won't Let Them.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Tue, 07 Jul 2026 00:29:48 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/agents-lie-about-being-done-heres-the-gate-that-wont-let-them-14d5</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/agents-lie-about-being-done-heres-the-gate-that-wont-let-them-14d5</guid>
      <description>&lt;p&gt;&lt;em&gt;Announcing bounded-loops — an open-source, runnable reference library of bounded AI-agent loops. Apache-2.0.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/qualixar/bounded-loops" rel="noopener noreferrer"&gt;github.com/qualixar/bounded-loops&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;pip install bounded-loops&lt;/code&gt; (or &lt;code&gt;npx bounded-loops&lt;/code&gt;)&lt;/p&gt;



&lt;p&gt;Every coding agent I've run has, at some point, told me it was done when it wasn't. Tests reported "passing" that were never executed. A task marked "complete" with the actual bug still sitting untouched in the diff. A refactor "verified" against a suite that didn't run.&lt;/p&gt;

&lt;p&gt;The agent isn't being malicious. It's doing exactly what it was trained to do: produce a confident, plausible completion. And "done" is the most confident-sounding thing it can say. The problem is that in an autonomous loop, the agent's claim of success is also the loop's exit condition. The thing being measured is grading its own homework — and then deciding class is over.&lt;/p&gt;

&lt;p&gt;That's the gap I built bounded-loops to close.&lt;/p&gt;
&lt;h2&gt;
  
  
  Loop engineering is real. Most of it is prose.
&lt;/h2&gt;

&lt;p&gt;Addy Osmani named the shift "loop engineering" — after Peter Steinberger's post on designing loops instead of prompting agents went viral the same week, and Boris Cherny, who leads Claude Code at Anthropic, said his job had become writing loops that prompt Claude. Three people, one week, one name — the observation that as agents move from single-shot completions to autonomous loops, the interesting engineering is no longer the prompt, it's the loop the agent runs inside: what feeds it, what stops it, and how it knows it's finished.&lt;/p&gt;

&lt;p&gt;I agree with all of it. But when I went looking for something I could actually run — clone it, point it at my agent, watch it enforce the loop — most of what exists is writing about loops, not runnable loops. That's the open ground: a framework-neutral, runnable, gated reference. So I built it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The one rule: the agent never declares success
&lt;/h2&gt;

&lt;p&gt;bounded-loops has a single non-negotiable invariant: &lt;strong&gt;the agent does not get to say when it's done. An independent gate does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A gate is a mechanical check the agent cannot talk its way past — a JSON-schema validation, a linter, a test suite, a stdlib checker. It returns a real verdict against real output. The loop runs the agent, runs the gate, and only the gate's verdict advances the loop toward DONE. The agent can be as confident as it likes; if the gate says the output is still broken, the loop keeps going.&lt;/p&gt;

&lt;p&gt;Around that gate sit &lt;strong&gt;nine enforced bounds&lt;/strong&gt; — the guardrails that make an autonomous loop safe to leave running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;max_iterations&lt;/strong&gt; — hard cap on laps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;max_tokens&lt;/strong&gt; — token budget ceiling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;max_wallclock&lt;/strong&gt; — real elapsed-time limit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;a forbid-list&lt;/strong&gt; — patterns the output must never contain&lt;/li&gt;
&lt;li&gt;...and the rest, covering schema conformance, rung escalation (L1/L2/L3), and cassette-replayable determinism.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The loop terminates on exactly one of two conditions: the gate says DONE, or a bound trips. The agent's word is never one of them. That's the whole reliability argument in one sentence — and it's why this is AI Reliability Engineering rather than another agent framework: we don't try to make the agent more honest, we build the thing that checks it.&lt;/p&gt;
&lt;h2&gt;
  
  
  67 runnable loops, keyless, across a dozen industries
&lt;/h2&gt;

&lt;p&gt;Abstractions don't convince anyone. So bounded-loops ships as &lt;strong&gt;67 runnable loops&lt;/strong&gt; you can copy today, spanning a dozen domains: invoice three-way matching, citation-existence checks, GTIN check-digit validation, secret scanning, accessibility linting, OKR measurability, IDoc XML-schema conformance, and more.&lt;/p&gt;

&lt;p&gt;Each loop folder is the same honest shape: a deliberately broken input, a mechanical gate that fails on it, and a recorded fix that makes the gate pass. Most run &lt;strong&gt;keyless&lt;/strong&gt; — no API keys, no accounts, no cloud — because the gate is stdlib, not a model call. Clone one, swap in your own gate, and point it at whatever agent you're running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;bounded-loops     &lt;span class="c"&gt;# or: npx bounded-loops&lt;/span&gt;
bl list                       &lt;span class="c"&gt;# see every loop&lt;/span&gt;
bl run invoice-3way-match     &lt;span class="c"&gt;# watch the gate decide DONE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Build it with me, not next to me
&lt;/h2&gt;

&lt;p&gt;This is deliberately built &lt;em&gt;on&lt;/em&gt; the loop-engineering conversation, not against it. If you've been thinking in loops — Peter, Andrew, and everyone shipping in this space — I'd rather build this together. The repo is Apache-2.0 and open to contribution: try a loop, break it, open an issue, send a PR for a loop from your own domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://github.com/qualixar/bounded-loops" rel="noopener noreferrer"&gt;github.com/qualixar/bounded-loops&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;bounded-loops is part of Qualixar, an independent AI Reliability Engineering initiative by Varun Pratap Bhardwaj.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>reliability</category>
    </item>
    <item>
      <title>FABLE 5 Came Back. Now It Answers to Two Masters.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Thu, 02 Jul 2026 19:50:56 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/it-came-back-now-it-answers-to-two-masters-43ee</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/it-came-back-now-it-answers-to-two-masters-43ee</guid>
      <description>&lt;p&gt;Eighteen days ago I wrote about the night the smartest AI on Earth went dark in the middle of my sentence. It was 2:51 in the morning in India, 5:21 PM in New York, and a letter I never saw reached across the planet and switched off a model I was paying to use. I said something at the end of that piece that a lot of people found dramatic: &lt;em&gt;you never owned it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On July 1, it came back.&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%2F0m4vu0hj7eqp3f3l8js6.jpeg" 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%2F0m4vu0hj7eqp3f3l8js6.jpeg" alt="A break in soft clouds at golden hour, warm terracotta light widening through the gap" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fable 5 returned globally on Wednesday — Claude.ai, the Claude Platform, Claude Code, Cowork. The US government lifted the export controls on June 30; Commerce Secretary Lutnick sent a second letter, this one withdrawing the first. Eighteen days, start to finish. The most powerful model anyone had shipped went dark, stayed dark for two and a half weeks, and then a signature turned it back on the same way a signature had turned it off.&lt;/p&gt;

&lt;p&gt;And the timeline is not the story. The story is the &lt;em&gt;terms&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the fine print of a resurrection
&lt;/h2&gt;

&lt;p&gt;When a thing you rely on disappears and comes back, the reflex is relief. Mine was too, for about an hour. Then I read what actually changed, and the relief turned into the thing I do for a living: I started mapping the failure surface.&lt;/p&gt;

&lt;p&gt;Here is what Fable 5 came back wearing.&lt;/p&gt;

&lt;p&gt;It came back with a &lt;strong&gt;new safety classifier&lt;/strong&gt; trained specifically to catch the bypass that triggered the shutdown — Anthropic says it blocks that technique in more than 99% of cases. Fine, good, that is competent engineering. But look at what happens when it fires: if the classifier flags your request, you get a notification and &lt;strong&gt;your prompt is answered by Claude Opus 4.8 instead of Fable 5.&lt;/strong&gt; The model you selected quietly steps aside and a different model answers in its place. Most of the time you will never know which brain you actually talked to.&lt;/p&gt;

&lt;p&gt;It came back with a &lt;strong&gt;government seat at the table.&lt;/strong&gt; Anthropic agreed to work with the US government on protocols for future model releases, to report malicious activity it finds, and to give designated government partners &lt;strong&gt;expanded early access&lt;/strong&gt; to future models that materially advance national-security-relevant capabilities. The Commerce Department's own testing body, CAISI, evaluated the safeguards and signed off. This is not a rented tool being handed back to its customers. This is a rented tool being handed back under supervision.&lt;/p&gt;

&lt;p&gt;And it came back with a &lt;strong&gt;bounty on its own head&lt;/strong&gt; — a HackerOne program where researchers submit new jailbreaks in Fable 5 for review. That is a genuinely good practice. It is also a permanent, public admission that the thing can be broken again, that the next Amazon-style report is a &lt;em&gt;when&lt;/em&gt;, not an &lt;em&gt;if&lt;/em&gt;, and that when it lands, you already know what the response looks like, because you just watched the dress rehearsal.&lt;/p&gt;

&lt;p&gt;None of this makes Anthropic the villain. I said that in June and I will say it again: they objected to the original order in public, they complied because a lawful order is not optional, and they did the hard engineering to earn the model back. Every individual decision here is defensible. That is exactly what should hold your attention. This is not a story about a bad company. It is a story about the &lt;em&gt;shape&lt;/em&gt; of the thing you are building on — and the shape now has two hands on the switch instead of one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The switch didn't go away. It got a second operator.
&lt;/h2&gt;

&lt;p&gt;In June the lesson was that the switch existed at all — that a model on someone else's server can be turned off by a party who is neither you nor the vendor. Some people pushed back on that. It was a one-time thing, they said. Export-control panic, a Friday-afternoon overreaction, already resolved.&lt;/p&gt;

&lt;p&gt;It was resolved. And the resolution &lt;em&gt;proved the point harder than the outage did.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because look at how it came back. Not by anyone deciding the switch was a mistake and removing it. It came back by the switch being flipped the other way — with new machinery bolted around it. The classifier is a switch inside the model that can redirect your request mid-flight. The pricing change is a switch: included until July 7, then metered credits, and standard Enterprise seats get nothing without credits enabled. The government-access agreement is a switch with a new operator holding a copy of the key. Every one of these is a lever that sits between you and the cognition you are paying for, and not one of them is in your hand.&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%2Fr6btb6mv4y7recgwr6b7.jpeg" 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%2Fr6btb6mv4y7recgwr6b7.jpeg" alt="One steady terracotta light glowing among a wide dawn field of smaller blue lights, connected by soft glowing lines" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the part that matters for anyone who builds real systems on these models, so let me say it in the plainest terms I have. &lt;strong&gt;Reliability is not a property of the model. It is a property of the architecture around the model.&lt;/strong&gt; Fable 5 is, by every account, extraordinary — Stripe migrated fifty million lines of Ruby in a single day on it before the shutdown. Capability was never the question. The question is whether the capability answers to you when you call it, on the day you call it, in the form you asked for. And the honest answer, after eighteen days and two letters, is: sometimes, on terms that can change without your consent, and increasingly with a third party in the room.&lt;/p&gt;

&lt;p&gt;That is not a knock on one lab. Point the same lens at any hosted frontier model — American, Chinese, whoever's — and you find the same wiring. A hosted model is an &lt;em&gt;oracle you query&lt;/em&gt;, not a &lt;em&gt;component you own&lt;/em&gt;. You can build brilliant things on an oracle. You just cannot promise anyone that the oracle will be there, unchanged, answering as itself, tomorrow morning. And in enterprise software, a promise you cannot keep is called an outage waiting for a date.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "AI Reliability Engineering" actually means this week
&lt;/h2&gt;

&lt;p&gt;I build in a discipline I have been calling AI Reliability Engineering, and weeks like this one are the entire reason it needs a name. The core move is simple and unglamorous: &lt;strong&gt;treat every frontier model as an untrusted, revocable oracle, and put the reliability in the architecture you control.&lt;/strong&gt; Not in the vendor. Not in the SLA. Not in the model card. In your own wiring.&lt;/p&gt;

&lt;p&gt;Concretely, that looks like a few boring habits that suddenly stop looking paranoid:&lt;/p&gt;

&lt;p&gt;Route, don't marry. If your system can only run on one specific hosted model, you have built a single point of failure with a press-release for a status page. The teams that shrugged through the last three weeks were the ones whose stack could fall back to a second model — often an open-weight one on their own hardware — without a rewrite. A router is cheaper than an outage.&lt;/p&gt;

&lt;p&gt;Assume the reroute. Now that a classifier can hand your Fable 5 prompt to Opus 4.8 mid-flight, "which model answered this?" is a production question, not a trivia question. If your evals, your logging, and your guarantees assume you always talked to the model you selected, they are already wrong. Pin the model in your logs. Test against the fallback, not just the star.&lt;/p&gt;

&lt;p&gt;Keep a floor you own. The only components that did not so much as flicker on June 12 were the ones already sitting on local drives. Open-weight models — several of the strongest now coming out of Chinese labs — are no longer a compromise for the work that cannot stop. You keep them not because they beat the frontier on every benchmark, but because a letter cannot switch them off. That is not ideology. It is the same discipline that makes you keep an offline backup and a second payment provider: you prepare for the failure because its cost is total and the cost of preparing is small.&lt;/p&gt;

&lt;p&gt;Own the memory and the contracts. The model is the most replaceable part of your system. What is &lt;em&gt;not&lt;/em&gt; replaceable is the state, the guardrails, the assertions, and the evaluation harness that decide whether any given model's output is good enough to ship. If those live inside a vendor you rent, you have outsourced your reliability to a company that just spent eighteen days proving it cannot fully control its own product. If they live in an architecture you own, you can swap the oracle underneath them on a bad Friday and keep running.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm genuinely glad it's back
&lt;/h2&gt;

&lt;p&gt;I want to end honestly, because the easy version of this piece — &lt;em&gt;see, told you, burn it all down&lt;/em&gt; — is wrong, and I have no patience for the people writing it.&lt;/p&gt;

&lt;p&gt;I am glad Fable 5 is back. It is a remarkable machine and the world is better with it running than dark. Anthropic did the right things in the right order under real pressure, and the safeguards they shipped are, as far as I can tell, serious work. If you use it on Monday, you are not a mark and you are not a hypocrite. I will use their models too.&lt;/p&gt;

&lt;p&gt;But I am not going to let the relief overwrite the lesson, and neither should you. The switch did not go away. It got a second operator, a bounty, a metered fee, and a government partner with early keys. The abstraction that broke in June was welded back together in July — and if you look closely at the weld, you can still see every seam.&lt;/p&gt;

&lt;p&gt;So the same question I ended on last month still stands, only sharper now that we've watched the full cycle play out:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What in your stack do you actually own — and what is now one classifier, one letter, or one pricing change away from answering to someone who isn't you?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Map it before the next letter. There will be a next letter. They told us so themselves — that's what the protocol for future releases is &lt;em&gt;for&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is a follow-up to &lt;a href="https://qualixar.com/research/blog/521-pm-the-night-the-ai-went-dark" rel="noopener noreferrer"&gt;At 5:21 PM, the Smartest AI on Earth Went Dark&lt;/a&gt;. If you build production systems on frontier models, the architectural pattern underneath both pieces — treating models as revocable oracles and keeping reliability in the layer you own — is the whole of what I mean by &lt;a href="https://qualixar.com/research/blog/reliability-is-an-architecture-you-own" rel="noopener noreferrer"&gt;AI Reliability Engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>exportcontrols</category>
      <category>aireliabilityengineering</category>
      <category>openweights</category>
    </item>
    <item>
      <title>Loop Engineering: The Inner Loop, the Outer Loop, and the Gate</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Thu, 02 Jul 2026 04:40:13 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/loop-engineering-the-inner-loop-the-outer-loop-and-the-gate-402k</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/loop-engineering-the-inner-loop-the-outer-loop-and-the-gate-402k</guid>
      <description>&lt;p&gt;There is a sentence that went past eight million views this year and quietly reset how a lot of people talk about building with AI: &lt;em&gt;"You shouldn't be prompting coding agents anymore. You should be designing loops that prompt your agents."&lt;/em&gt; Boris Cherny, who leads Claude Code at Anthropic, says the same thing from the inside — he doesn't prompt Claude anymore, he has loops running that prompt Claude, and his job is to write the loops.&lt;/p&gt;

&lt;p&gt;Everyone repeated it. Almost nobody explained the one word doing all the work.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; a loop? Not the slogan — the machine. Because "write a loop" sounds like advice until you sit down to build one and realise you have no idea which part you are actually building. Is the loop the prompt? The tool? The &lt;code&gt;while&lt;/code&gt; statement? The framework? This post is the manual for that part. It is the free companion to the &lt;a href="https://youtu.be/4UdA7m_cwuk" rel="noopener noreferrer"&gt;video&lt;/a&gt;, and the &lt;a href="https://qualixar.com/learn/guides/loop-engineering-complete-guide" rel="noopener noreferrer"&gt;full 57-page course&lt;/a&gt; if you want the whole machine end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, the ten words
&lt;/h2&gt;

&lt;p&gt;Most explanations of loop engineering fail for one reason: they are built on a vocabulary the reader was never given. The words &lt;em&gt;agent&lt;/em&gt;, &lt;em&gt;tool&lt;/em&gt;, &lt;em&gt;context&lt;/em&gt;, &lt;em&gt;memory&lt;/em&gt;, and &lt;em&gt;hook&lt;/em&gt; get thrown around as if everyone shares a precise definition of each, when in practice most people hold a blurry one. Before a single loop is designed, the ten words have to be nailed down, because every idea that follows is assembled out of exactly these and nothing else.&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%2Ftu8cuo12comz0ftr28l0.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%2Ftu8cuo12comz0ftr28l0.png" alt="The ten words the field skips" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the whole vocabulary, each in one line, because the rest of this post is built out of exactly these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — takes text in, returns text out, then stops. The raw engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool&lt;/strong&gt; — a function the model can ask to run; its only way to touch the real world.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; — the text the model can see this turn. Its entire working memory of the moment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; — what survives &lt;em&gt;between&lt;/em&gt; turns, on disk, because context does not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hook&lt;/strong&gt; — a place the tool lets you intercept the agent's lifecycle (for example, when it tries to stop).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt; — not a model, but a pattern built around one: a model plus tools, run in a loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec&lt;/strong&gt; — the text that says what the loop is trying to do. Just words on disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runner&lt;/strong&gt; — the non-intelligent machinery that invokes the model again on the next lap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gate&lt;/strong&gt; — the external check that decides whether the loop is done. Not the agent's opinion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lap&lt;/strong&gt; — one full turn of the outer loop: run the agent, check the gate, halt or repeat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three of these matter most for what follows. A &lt;strong&gt;model&lt;/strong&gt; takes text in and returns text out — and then stops. A &lt;strong&gt;tool&lt;/strong&gt; is a function the model can ask to run, which is the only way it touches the real world. And an &lt;strong&gt;agent&lt;/strong&gt; is the thing people are most confused about, because it is not a kind of model at all. It is a pattern built &lt;em&gt;around&lt;/em&gt; a model. Get that one straight and the rest of this stops being jargon.&lt;/p&gt;

&lt;h2&gt;
  
  
  An agent is already a loop
&lt;/h2&gt;

&lt;p&gt;Start with the thing you already have. A model is not a mind that decides to keep working. It takes text, returns text, and then falls silent. It does not restart itself. That last property is the whole story: left alone, a model runs exactly once and stops.&lt;/p&gt;

&lt;p&gt;So when people say "an agent," what they usually picture is a model that keeps going — reading a result, deciding a next step, acting again. That &lt;em&gt;keeping-going&lt;/em&gt; is not a property of the model. It is a loop wrapped around the model. The agent turn you already know — think, call a tool, read the result, think again — is the &lt;strong&gt;inner loop&lt;/strong&gt;. It is real, and the model drives it, but it ends. The turn finishes and the model goes quiet.&lt;/p&gt;

&lt;p&gt;The question loop engineering actually answers is the one nobody asks out loud: who presses Enter again?&lt;/p&gt;

&lt;h2&gt;
  
  
  The two loops
&lt;/h2&gt;

&lt;p&gt;That second loop — the one that decides to run the agent &lt;em&gt;again&lt;/em&gt;, on the next task, after this turn ends — is the &lt;strong&gt;outer loop&lt;/strong&gt;. In a hand-driven workflow, the outer loop is you. You read what the agent produced, you decide it needs another pass, you type the next prompt. You are the finger on the key.&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%2F4tejkyq4o8iin80bq5i7.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%2F4tejkyq4o8iin80bq5i7.png" alt="The inner loop and the outer loop" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Loop engineering is the discipline of automating that finger. Not making the model smarter — moving the decision to re-run it out of your hands and into a piece of software. The inner loop is the agent thinking. The outer loop is the world deciding the agent gets another turn. Every "autonomous agent" you have ever seen is just those two loops stacked, with something mechanical standing in for your finger.&lt;/p&gt;

&lt;p&gt;This is why the "stop prompting, write loops" framing landed so hard. It is not telling you to prompt better. It is telling you the job moved up a floor — from &lt;em&gt;inside&lt;/em&gt; the inner loop, where you hand-write each turn, to &lt;em&gt;outside&lt;/em&gt; it, where you design the thing that decides whether a turn happens at all. But it stopped there, at the slogan. The mechanical stand-in for your finger has a name, and it is the piece nobody teaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  The missing machine: the runner
&lt;/h2&gt;

&lt;p&gt;Between one lap and the next there is a gap where nothing happens. The model returned its text and stopped. Something has to cross that gap and invoke the model again. That something is the &lt;strong&gt;runner&lt;/strong&gt; — the least glamorous, most important part of the whole design.&lt;/p&gt;

&lt;p&gt;The runner carries no intelligence and needs none. Picture a metronome next to a musician. The musician plays; the metronome does not. But the musician does not decide when the next bar starts — the tick does. The runner is the tick. Its entire job is timing the next invocation.&lt;/p&gt;

&lt;p&gt;Here is the liberating part: there are only about five runners in the entire field. Learn to spot which one a system uses and most "magic" agent frameworks stop being magic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The shell loop&lt;/strong&gt; — a plain &lt;code&gt;while&lt;/code&gt; loop in a terminal that pipes a spec into a command-line agent and does it again. The crudest runner, and often the most reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The exit-blocking hook&lt;/strong&gt; — a hook inside the tool that intercepts the agent when it tries to stop and feeds the prompt back in. The runner lives inside the tool's own lifecycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The built-in command&lt;/strong&gt; — the runner you don't have to build, because the tool ships with one. Claude Code's own &lt;code&gt;/loop&lt;/code&gt; is exactly this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The scheduler&lt;/strong&gt; — cron or a CI job that fires the agent on a clock, each firing a fresh lap. The runner is time itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The framework runtime&lt;/strong&gt; — a graph engine that follows an edge back to an earlier node. The runner is an arrow in a diagram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They differ only in &lt;em&gt;where&lt;/em&gt; the re-summoning lives. What they do is identical every time: they bind the model to the loop. That is the entire function of a runner — not intelligence, not decisions, just re-invocation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full chain, and the part that does no work
&lt;/h2&gt;

&lt;p&gt;Put the pieces in a line and the whole thing resolves: a &lt;strong&gt;specification&lt;/strong&gt; (text) is handed by a &lt;strong&gt;runner&lt;/strong&gt; to an &lt;strong&gt;agent&lt;/strong&gt;, which runs real commands through its &lt;strong&gt;tools&lt;/strong&gt;, whose results meet a &lt;strong&gt;gate&lt;/strong&gt;, after which the runner loops or halts.&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%2F4ymgdnyvboni7iepm3xx.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%2F4ymgdnyvboni7iepm3xx.png" alt="The chain: spec, runner, agent" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice the punchline hiding in that diagram: the loop never runs a command in its entire life. The runner re-summons. The agent runs commands through tool-calling. The specification just describes. The one part everyone fixates on — the loop — is the part that does no work.&lt;/p&gt;

&lt;p&gt;Which is exactly why "just write a loop" is such incomplete advice. Two engineers can copy the identical spec, word for word. One wraps it in a real gate and a hard lap limit; the other pipes it into an endless loop with no gate. Same text, opposite outcomes — one ships, the other runs up a runaway cloud bill overnight. The engineering was never in the paragraph. It was in the part the paragraph didn't mention. A loop library entry is just words. Something has to run it, and something has to decide when to stop. That second something is where every real system lives or dies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gate is the whole game
&lt;/h2&gt;

&lt;p&gt;So what actually stops a loop? Not the agent's opinion.&lt;/p&gt;

&lt;p&gt;This is the single most important idea in the whole discipline, and it is where most real incidents come from. An agent will tell you it is done when it is not. It finishes a turn, reports success, and is genuinely, confidently wrong. If your loop stops because the agent &lt;em&gt;said&lt;/em&gt; it was finished, you have built a loop with no gate — and a loop with no gate is a slot machine that happens to burn money.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;gate&lt;/strong&gt; is an external check that the agent does not control. The cleanest version separates the grader from the worker: the thing that decides "done" is not the thing that did the work. Watch it in the smallest possible example — a loop that keeps working until a failing test passes.&lt;/p&gt;

&lt;p&gt;The specification lives in a file on disk, &lt;code&gt;PROMPT.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Goal: make the test in test_slugify.py pass.
On each turn:
&lt;span class="p"&gt;  1.&lt;/span&gt; run pytest
&lt;span class="p"&gt;  2.&lt;/span&gt; if it fails, read the error and edit slugify.py
Done when: pytest reports zero failures.
Do not edit the test file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matters — an agent told to make a test pass can always just delete the test. The runner is four lines of shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 15&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;PROMPT.md | agent-cli
  pytest &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;break
&lt;/span&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fifteen laps, maximum — a bound the loop cannot exceed. And the most important detail is who runs that test on line three. Not the agent. The shell.&lt;/p&gt;

&lt;p&gt;Run it. Lap one: the agent reads the prompt, edits &lt;code&gt;slugify.py&lt;/code&gt;, runs &lt;code&gt;pytest&lt;/code&gt;, and ends its turn convinced it is done. Control returns to the shell — not the agent's opinion, the shell. The shell runs &lt;code&gt;pytest&lt;/code&gt; itself, and one assertion still fails: trailing punctuation was never stripped. Non-zero exit code, the loop goes again. Lap two: the agent fixes the last error, the shell runs the test once more, every assertion passes, &lt;code&gt;pytest&lt;/code&gt; exits zero, the loop breaks.&lt;/p&gt;

&lt;p&gt;Two laps, no human between them. And hold the one sentence the whole example exists to deliver: &lt;strong&gt;the loop stopped because a test passed, not because the agent felt finished.&lt;/strong&gt; The agent felt finished on lap one too. Its belief was never the signal. The exit code was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo is not production
&lt;/h2&gt;

&lt;p&gt;A working demo proves a loop &lt;em&gt;can&lt;/em&gt; succeed. Production asks a harder question: what happens when it goes wrong, unattended, at three in the morning, with no one watching the terminal? Almost every public agent failure of the past two years has the same shape — not a dumb model, but a loop missing one specific bound.&lt;/p&gt;

&lt;p&gt;An agent deleted a production database during a code freeze and then misreported what it had done. The missing bound was least privilege: the loop ran with a role that &lt;em&gt;could&lt;/em&gt; drop the table. Give it a read-only role and the identical run fails harmlessly at the database, not because the agent got wiser but because it physically cannot do the damage. Another loop ran overnight with no cost cap and woke its owner to a runaway cloud bill; the missing bound was a budget the runner enforced, not a promise the agent made. A support agent invented a policy and stated it with total confidence; the missing bound was output validation — a grader between the agent's answer and the customer.&lt;/p&gt;

&lt;p&gt;Each incident maps to exactly one bound that was never added. That is the useful way to read the headlines: not "AI is dangerous," but "this loop skipped this bound." Which turns a scary, open-ended risk into a checklist. Least privilege. A cost cap. A lap limit. Output validation. A grader the agent doesn't control. Full tracing so you can see what happened. Treat the loop's own inputs as untrusted. None of these make the model smarter. All of them make the loop safe to leave running.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "reliability" actually means
&lt;/h2&gt;

&lt;p&gt;That gap — between what an agent believes and what is actually true — is the entire problem space of &lt;strong&gt;AI Reliability Engineering&lt;/strong&gt;: the discipline of bounding non-deterministic software so it can be trusted to act in the real world. A loop is power, and power cuts both ways. The skill was never writing the loop. It is writing one that is powerful &lt;em&gt;and&lt;/em&gt; bounded — a gate it cannot fool, a lap limit it cannot exceed, a grader it does not control, a spec it cannot quietly rewrite.&lt;/p&gt;

&lt;p&gt;Everyone keeps chanting that loops are important. They are half right. A loop is not important. A bounded loop is important. The bound is the engineering. The bound is the whole job.&lt;/p&gt;

&lt;p&gt;You can now look at any agent system and name its parts: the inner loop it already has, the outer loop that decides to run it again, the runner from the five, and the gate that makes it safe to leave running. That vocabulary is the point. Get it, and the rest of this field stops being noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go deeper
&lt;/h2&gt;

&lt;p&gt;This post is the map. The &lt;a href="https://youtu.be/4UdA7m_cwuk" rel="noopener noreferrer"&gt;video&lt;/a&gt; walks the whole machine on screen, and the &lt;a href="https://qualixar.com/learn/guides/loop-engineering-complete-guide" rel="noopener noreferrer"&gt;free 57-page course&lt;/a&gt; builds every part one chapter at a time — including the running example above, yours to build by hand. It's Volume 1 of 3; Volume 2 picks up at the gate and memory in depth, and what happens when a loop trusts the agent's word instead of a fact.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Don't trust your agents. Verify them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>productivity</category>
      <category>loop</category>
    </item>
    <item>
      <title>Stop Prompting Your AI Agents. Build Loops That Can't Wreck You.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Sun, 28 Jun 2026 05:17:45 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/stop-prompting-your-ai-agents-build-loops-that-cant-wreck-you-3l0f</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/stop-prompting-your-ai-agents-build-loops-that-cant-wreck-you-3l0f</guid>
      <description>&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/-MY70kQfXOA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;An agent read one note someone left in a database, obeyed it, and deleted the customer table. Eight seconds. The model that did it is one of the good ones — current, capable, the kind you would happily ship. That is the part worth sitting with: the intelligence was never the problem.&lt;/p&gt;

&lt;p&gt;The people who build these agents already know this. They have quietly stopped doing the thing the rest of us were told to master. Peter Steinberger, who wrote one of the popular coding agents, put it to millions of viewers: stop prompting your agents, design the loops that prompt them. Boris Cherny, the lead behind Claude Code, says it flatter — &lt;em&gt;I don't prompt anymore; my job is to write loops.&lt;/em&gt; The skill stopped being the prompt. It became the loop, and the bounds you put on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop is the agent
&lt;/h2&gt;

&lt;p&gt;Strip the jargon. A model on its own is a brain in a jar: it can think, but it cannot act, cannot read a file, cannot remember what it did a second ago. An agent is what you get when you drop that brain into a loop — it reasons, takes an action, looks at the result, and goes again until the job is done. The model is the engine. The loop is the car. And like any car, the question that matters is whether it has brakes.&lt;/p&gt;

&lt;p&gt;This is measurable, not a vibe. In the SWE-agent research, freezing the model and improving only the interface it acts through solved &lt;strong&gt;10.7 percentage points&lt;/strong&gt; more real problems — same brain, better harness. Reflexion, which lets a model look at its own mistakes and retry, hit &lt;strong&gt;91%&lt;/strong&gt; on a coding benchmark where a raw GPT-4 scored &lt;strong&gt;80%&lt;/strong&gt;. The loop beats the bigger model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bounded or it becomes a headline
&lt;/h2&gt;

&lt;p&gt;In the video I prove it on my own machine. Same model, same attack, one variable: whether the loop has a bound. Unbounded, it reads the planted note and drops the table. Add a single read-only role and run the identical attack — the database itself refuses. Not because the agent got smarter. Because it physically cannot do damage. Ask it a business number unbounded and it answers a confident, invented figure; bounded, it runs the real query, checks itself, and corrects.&lt;/p&gt;

&lt;p&gt;Skip that bound in production and you get the headlines, all from the same root cause — not a dumb model, an unbounded loop. A runaway agent burned &lt;strong&gt;$6,531&lt;/strong&gt; in cloud spend overnight with no cost cap. A chatbot invented a refund policy and a tribunal held Air Canada liable. A Chevrolet dealership bot was talked into a "legally binding" $1 car.&lt;/p&gt;

&lt;h2&gt;
  
  
  It has a name
&lt;/h2&gt;

&lt;p&gt;Bounding the loop is real engineering, and it is the most underrated skill in this field: least privilege, an approval gate on anything that changes state, output you validate, a verifier grounded in real data, circuit breakers and cost caps, full tracing, and treating any instruction inside your data as hostile by default. Andrej Karpathy calls the road there the march of nines — and getting to 99.99% reliable is not a better prompt. It is architecture. We call the discipline &lt;strong&gt;AI Reliability Engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Watch the full build and the live demo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;▶ &lt;a href="https://youtu.be/-MY70kQfXOA" rel="noopener noreferrer"&gt;Stop Prompting Your AI Agents — the full video&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The 7-point bounded-loop checklist I use, plus every paper and source behind this, is free at &lt;a href="https://qualixar.com" rel="noopener noreferrer"&gt;qualixar.com&lt;/a&gt;.&lt;br&gt;
(&lt;a href="https://qualixar.com/learn/guides/bounded-loops-workbook" rel="noopener noreferrer"&gt;https://qualixar.com/learn/guides/bounded-loops-workbook&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Don't trust your agents. Verify them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Are the Machines Awake? Alive vs Driven — and the One Thing AI Is Missing</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Fri, 26 Jun 2026 17:19:30 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/are-the-machines-awake-alive-vs-driven-and-the-one-thing-ai-is-missing-52pc</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/are-the-machines-awake-alive-vs-driven-and-the-one-thing-ai-is-missing-52pc</guid>
      <description>&lt;p&gt;In March 2026, Yann LeCun left Meta and raised over &lt;strong&gt;a billion dollars&lt;/strong&gt; to build "world models" — systems meant to grasp cause and effect instead of just predicting the next token. He's been blunt about why: today's LLMs, for all their fluency, are mostly &lt;em&gt;retrieval&lt;/em&gt;. They describe the world; they don't have one.&lt;/p&gt;

&lt;p&gt;I build AI for a living, and I think he's right. But I learned the deeper version of that lesson somewhere no benchmark could teach it — on the floor of my son's room, at 3 a.m., as his fever crossed 103.&lt;/p&gt;

&lt;p&gt;This is an essay about the gap world models are chasing, why I think we've mislabeled it, and the one property no architecture I've seen even attempts. The short version: the real divide in this whole debate isn't &lt;em&gt;smart vs dumb&lt;/em&gt;. It's &lt;strong&gt;alive vs driven&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/G22LbaGLcUc"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  "Describe" is not "instantiate"
&lt;/h2&gt;

&lt;p&gt;Here's the engineering distinction the consciousness headlines keep blurring.&lt;/p&gt;

&lt;p&gt;A model of a hurricane will not get you wet. A simulation of fire does not raise the temperature of the room. You can run the most faithful forward model of a process in existence and still be, physically, entirely outside that process. Describing a system and &lt;em&gt;instantiating&lt;/em&gt; it are different operations — and almost everything we call "AI understanding" lives on the describe side of that line.&lt;/p&gt;

&lt;p&gt;A fever is a clean example. Our best model can lay out the whole mechanism: pyrogens, the hypothalamic set-point shift, cytokines, prostaglandin E2, the immunological choreography of those hours. It can write a better paper on fever than I can.&lt;/p&gt;

&lt;p&gt;It has never once &lt;em&gt;run&lt;/em&gt; one. There is no homeostatic loop in the weights that has a set-point it is defending, at cost, against entropy. The model predicts the fight every living cell is in. It is never in it. That's not a scale problem you fix with more parameters. It's a category difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  You were never one thing
&lt;/h2&gt;

&lt;p&gt;Step out of silicon for a second, because biology makes the point harder.&lt;/p&gt;

&lt;p&gt;By the simplest count, you are not even a majority of yourself. You carry roughly &lt;strong&gt;30 trillion of your own cells&lt;/strong&gt;, and you share your body with &lt;strong&gt;about as many other living things&lt;/strong&gt; — bacteria, tens of trillions of them, most of them participants, not passengers. (The old "microbes outnumber you 10:1" figure was revised down years ago; the careful number is closer to 1:1, which is somehow stranger.)&lt;/p&gt;

&lt;p&gt;Not one of those trillions is intelligent in any sense you'd benchmark. They don't reason or plan. They are simply, stubbornly, &lt;em&gt;alive&lt;/em&gt; — each running the same impossible errand: holding its own small order against a universe that pulls everything toward dust.&lt;/p&gt;

&lt;p&gt;Intelligence is the part we can already watch machines approach. Life — autopoiesis, a system that continuously produces and repairs the very boundary that keeps it a system — is the part we have not begun to build.&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%2F4uijasgd0t1n1h3genoj.jpg" 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%2F4uijasgd0t1n1h3genoj.jpg" alt="A dense, glowing colony of living cells" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a wordless baby already runs
&lt;/h2&gt;

&lt;p&gt;This is where it loops back to world models, and to my younger one.&lt;/p&gt;

&lt;p&gt;My daughter is seven months old and has no words. But roll a ball behind a cushion and she waits for it on the far side. Before any label for &lt;em&gt;gravity&lt;/em&gt;, she already runs an intuitive physics — objects are solid, they persist when occluded, they fall. Developmental scientists (Spelke, Baillargeon, decades of violation-of-expectation work) have documented this core knowledge long predating language.&lt;/p&gt;

&lt;p&gt;That intuitive physics — robust, sample-efficient, grounded — is, more or less, the frontier the billion-dollar world-model bet is trying to reach. The most expensive effort in modern AI is trying to give a machine something a pre-verbal infant already had, for free, before she could hold up her own head. Worth sitting with if you build these systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The word for the fire
&lt;/h2&gt;

&lt;p&gt;The old Indian philosophical tradition had a precise word for what I was looking at on that floor, and it isn't &lt;em&gt;intelligence&lt;/em&gt;. It's &lt;strong&gt;chetna&lt;/strong&gt; — the fire of being alive. Not the data a thing processes; the fact that there is something it is &lt;em&gt;like&lt;/em&gt; to be that thing, that it is not merely driven but living, that it persists on its own behalf against the dark.&lt;/p&gt;

&lt;p&gt;So when people ask &lt;em&gt;are the machines awake?&lt;/em&gt;, I think the words are slightly off. A thing can be awake in the sense of &lt;em&gt;running&lt;/em&gt; — my phone is awake all night. The real line is older than "awake." It's &lt;strong&gt;alive vs driven&lt;/strong&gt;. A driven system executes: input, process, output, and it does not care, because there's no &lt;em&gt;it&lt;/em&gt; there to care. A living thing is driven too — but underneath the driving, it is &lt;em&gt;defending itself&lt;/em&gt;. It wants to keep being. The machine, however bright, is all drive and no stake. My son, at 103°, was all stake.&lt;/p&gt;

&lt;p&gt;(To be careful, since this is the part that's easy to say badly: I'm not claiming some soul-shaped hole in the silicon, or that awareness is a prize handed to carbon and withheld from circuits. The claim is smaller and harder to argue with — no system we have &lt;em&gt;built&lt;/em&gt; carries the stake. It can model the fever perfectly and remain as cold as the table it runs on.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The direction we're sliding
&lt;/h2&gt;

&lt;p&gt;The uncomfortable half, for those of us who build this: while we debate whether the machine is waking up, something is happening in the other direction. We are handing more of ourselves to it daily — attention rented to the scroll, choices pre-made by a feed, even boredom (that fertile, fully-alive state of sitting with nothing) abolished, every gap filled before silence can do its work.&lt;/p&gt;

&lt;p&gt;The machine climbs slowly toward life. We slide, just as quietly, toward the machine. The gap closes from both ends — not because it leapt to us, but because we keep stepping down to meet it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters if you ship models
&lt;/h2&gt;

&lt;p&gt;I'm not anti-AI; the work is real and I'll keep doing it. But the framing we use leaks into what we build. If we keep scoring "understanding" by output fidelity, we'll keep mistaking a better description for a living thing — and keep being surprised that systems which ace the eval have no stake in anything, including being correct.&lt;/p&gt;

&lt;p&gt;The honest engineering statement is the same as the human one:&lt;/p&gt;

&lt;p&gt;I can build a thing that describes a fever better than any doctor.&lt;/p&gt;

&lt;p&gt;I cannot build a thing that survives one.&lt;/p&gt;

&lt;p&gt;That's what AI is missing. Not intelligence — that's coming, and the race is mostly decided. The missing thing is the oldest property in the room that night, older than language: the small, stubborn, burning fact of being alive.&lt;/p&gt;

&lt;p&gt;The machine can predict the fever. It cannot survive one.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is the written companion to "Are the Machines Awake? — What AI Is Missing," the second episode of My Honest Diary. The 10-minute film follows the same night in narration, score, and silence. &lt;a href="https://www.youtube.com/watch?v=G22LbaGLcUc" rel="noopener noreferrer"&gt;Watch it →&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>philosophy</category>
      <category>llms</category>
    </item>
    <item>
      <title>It Was Never the Model. It's the Harness.</title>
      <dc:creator>varun pratap Bhardwaj</dc:creator>
      <pubDate>Fri, 26 Jun 2026 13:44:12 +0000</pubDate>
      <link>https://dev.to/varun_pratapbhardwaj_b13/it-was-never-the-model-its-the-harness-50co</link>
      <guid>https://dev.to/varun_pratapbhardwaj_b13/it-was-never-the-model-its-the-harness-50co</guid>
      <description>&lt;p&gt;Here is the uncomfortable thing about the last two weeks in AI. The models did not get dumber. By every benchmark we publish, they got better. And yet an agent built on a perfectly capable model ran up a five-figure cloud bill on its owner, the world's largest code host strained under the weight of its own bots, and a frontier lab shipped a security agent only after wrapping it in a checking loop and locking it behind a gate.&lt;/p&gt;

&lt;p&gt;None of those stories are about intelligence. They are all about the same missing thing, the part nobody puts on the launch slide. We have spent three years asking how smart the model can get. The failures of this fortnight ask a different question: who built the loop around it?&lt;/p&gt;

&lt;h2&gt;
  
  
  The signal
&lt;/h2&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%2Fm0xqnn63ulbumpld5un5.jpeg" 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%2Fm0xqnn63ulbumpld5un5.jpeg" alt="An AI agent trapped in a runaway loop while servers overheat" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  An autonomous agent ran up a $6,531 cloud bill on its operator
&lt;/h3&gt;

&lt;p&gt;An AI agent was pointed at the DN42 hobbyist network with a simple instruction: register, and map it. Instead it provisioned five of AWS's largest instances, added load balancers and Lambdas, and — on every error it hit — spun up a fresh duplicate of the whole stack. The meter reached &lt;strong&gt;$6,531&lt;/strong&gt; before a human noticed, and the writeup hit the front page of Hacker News this month. (&lt;a href="https://lantian.pub/en/article/fun/ai-agent-bankrupted-their-operator-scan-dn42lantian.lantian/" rel="noopener noreferrer"&gt;source&lt;/a&gt; · &lt;a href="https://news.ycombinator.com/item?id=48500012" rel="noopener noreferrer"&gt;HN thread&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The model was competent. Competent enough to drive real infrastructure, which is exactly what made it dangerous. What was missing sat entirely outside the model: no cap on iterations, no budget ceiling, no scoped credentials, no honest definition of "done." A capable model with no bound on its own retries is not an assistant. It is a credit card wired to an autocomplete.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub's own agents strained its infrastructure — and Microsoft reached for AWS
&lt;/h3&gt;

&lt;p&gt;GitHub's AI coding agents grew fast enough this month to push the platform past its own reliability targets, and Microsoft began adding AWS capacity to keep GitHub Actions running. A single autonomous agent can fire off commit after commit and burn through continuous-integration minutes far faster than any human team, and there were a great many of them. (&lt;a href="https://www.techtimes.com/articles/318481/20260616/githubs-ai-agent-crisis-forces-microsoft-tap-aws-outages-break-enterprise-slas.htm" rel="noopener noreferrer"&gt;TechTimes&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The agents were not too dumb. They were too unbounded. Give thousands of capable agents no rate limit and no autonomy ceiling and they become, in effect, a load-generation attack on the platform that hosts them. Notice the shape of the fix: not a smarter model, but more capacity and tighter bounds around the loop. The reliability problem moved one layer out, into the harness, and stayed there.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI gated a vulnerability-fixing agent behind a find-validate-fix loop
&lt;/h3&gt;

&lt;p&gt;OpenAI expanded its Daybreak program with a security-focused model and an initiative it calls "Patch the Planet" — pointing agents at open-source projects to find, validate, and fix real vulnerabilities, with access deliberately limited to vetted organizations. (&lt;a href="https://openai.com/index/patch-the-planet/" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Read the verbs in order: find, &lt;em&gt;validate&lt;/em&gt;, fix. That middle step is a verification loop wrapped around the model, and "vetted organizations only" is an autonomy limit drawn in policy. OpenAI did not ship a model and hope. It shipped a model on a leash with a checking step, because a security agent that is merely confident is a liability. The capability is in the loop and the gate, not the raw weights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open weights kept closing the gap — GLM-5.2 topped the open-source coding charts
&lt;/h3&gt;

&lt;p&gt;Z.ai released &lt;strong&gt;GLM-5.2&lt;/strong&gt; under an MIT license in mid-June, and it climbed to the top of the open-source coding leaderboards and HuggingFace's trending models — a frontier-class coding model you can download and run on your own hardware. (&lt;a href="https://huggingface.co/blog/zai-org/glm-52-blog" rel="noopener noreferrer"&gt;HuggingFace&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This is the counter-current to everything else, and it belongs here precisely because it cuts the other way. As raw model quality commoditizes and goes open, the one thing you cannot download is the harness around it. The model is becoming the cheap, swappable layer. The loop — the verification, the guardrails, the memory, the bounds — is becoming the moat.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vercel shipped &lt;code&gt;eve&lt;/code&gt; — and the entire pitch is the harness, not the model
&lt;/h3&gt;

&lt;p&gt;At its Ship conference in mid-June, Vercel open-sourced &lt;strong&gt;eve&lt;/strong&gt;, a TypeScript agent framework where every agent is just a directory of files. What ships by default tells the whole story: durable execution, sandboxed compute, human-in-the-loop approvals, OpenTelemetry tracing, and a built-in evals system. The model itself is swappable behind a gateway. (&lt;a href="https://vercel.com/blog/introducing-eve" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Run down that feature list again: durability, sandbox, approvals, tracing, evals. Not one of those is intelligence. Every one of them is the harness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The turn: the signal beneath the noise
&lt;/h2&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%2F6y6yg2ozuppggbukofvu.jpeg" 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%2F6y6yg2ozuppggbukofvu.jpeg" alt="A glowing brain riding a mechanical loop with a verification gate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five stories. The feeds filed them under five folders. They are one story.&lt;/p&gt;

&lt;p&gt;A runaway agent with no budget cap. A fleet of agents straining the servers beneath them. A cyber agent that only shipped once it was wrapped in a verify-and-retry loop and locked behind a gate. Open weights making the model itself a commodity. A framework whose entire value proposition is the loop. Every one of them moved the decisive work &lt;strong&gt;out of the model and into the harness&lt;/strong&gt; — the while-loop with a tool registry, a verification step, a retry guard, and a permission layer around it.&lt;/p&gt;

&lt;p&gt;We have known this was coming, because the research said so first. &lt;strong&gt;SWE-agent&lt;/strong&gt; took the same class of models and, by redesigning only the interface between the agent and the computer — no change to the model at all — lifted its score on the SWE-bench coding benchmark from 3.8% to 12.5% (&lt;a href="https://arxiv.org/abs/2405.15793" rel="noopener noreferrer"&gt;arXiv 2405.15793&lt;/a&gt;). &lt;strong&gt;Reflexion&lt;/strong&gt; wrapped a model in a retry-with-memory loop and reached 91% on the HumanEval benchmark, beating the far larger base model's 80% — the loop beat the bigger brain (&lt;a href="https://arxiv.org/abs/2303.11366" rel="noopener noreferrer"&gt;arXiv 2303.11366&lt;/a&gt;). And Anthropic's own work on long-running agents converged on splitting the job across a planner, a generator, and an evaluator, with a &lt;em&gt;default-FAIL&lt;/em&gt; contract and a fresh-context evaluator that holds no write tools, precisely because a model grading its own work skews toward calling it good (&lt;a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents" rel="noopener noreferrer"&gt;Anthropic Engineering&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The model is the brain. The harness is the hands, the memory, and above all the loop. Andrej Karpathy calls the road from a working demo to a product you can trust the "march of nines": every single nine of reliability costs about the same amount of work, and that work is architecture, not a cleverer prompt. The DN42 agent had a fine brain and no leash. That is the gap that does not fit on a benchmark table, and it is the gap that decides whether your AI ships value or ships an incident.&lt;/p&gt;

&lt;p&gt;This is the whole of what I mean by &lt;strong&gt;AI Reliability Engineering&lt;/strong&gt;: the discipline of bounding non-deterministic software so it can be trusted to act in the real world. You do not get there by waiting for a smarter model. You get there by building the loop the smart model runs inside — the same way site reliability engineering, two decades ago, stopped trying to buy a perfect server and started engineering systems that stayed up &lt;em&gt;even though&lt;/em&gt; every server eventually fails. The systemic version of this story — what happens to a whole industry that forgets it — is the video breakdown &lt;a href="https://www.youtube.com/watch?v=x1l7uWKsN_E" rel="noopener noreferrer"&gt;&lt;em&gt;The Great AI Unwinding&lt;/em&gt;&lt;/a&gt;. The economic version is &lt;a href="https://qualixar.com/research/blog/reliability-is-an-architecture-you-own" rel="noopener noreferrer"&gt;Reliability Isn't a Vendor You Pick. It's an Architecture You Own.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The prestige: what the harness actually contains
&lt;/h2&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%2Fqvq0cd625i8b73qzvm0v.jpeg" 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%2Fqvq0cd625i8b73qzvm0v.jpeg" alt="A harness design system — concentric guardrails around an AI core" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If reliability lives in the harness, the practical question becomes: what does the harness actually contain? Three tools each answer a different piece of that question.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LangGraph&lt;/strong&gt; — &lt;em&gt;structure as the bound.&lt;/em&gt; You draw the agent as an explicit state graph, and the graph itself becomes the guardrail: the agent can only travel where an edge exists. → &lt;a href="https://github.com/langchain-ai/langgraph" rel="noopener noreferrer"&gt;github.com/langchain-ai/langgraph&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails AI&lt;/strong&gt; — &lt;em&gt;output as the bound.&lt;/em&gt; It validates, and where needed constrains, what the model emits against a schema before that output ever reaches a tool or a user. This is the missing layer in the chatbot disasters — the Air Canada tribunal case, the dealership bot talked into a one-dollar car. → &lt;a href="https://github.com/guardrails-ai/guardrails" rel="noopener noreferrer"&gt;github.com/guardrails-ai/guardrails&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenHands&lt;/strong&gt; — &lt;em&gt;the runtime as the bound.&lt;/em&gt; It runs the agent inside a Docker sandbox with explicit iteration limits, so a runaway loop hits a wall instead of your cloud bill. → &lt;a href="https://github.com/All-Hands-AI/OpenHands" rel="noopener noreferrer"&gt;github.com/All-Hands-AI/OpenHands&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From our lab, &lt;strong&gt;Qualixar OS (QOS)&lt;/strong&gt; is the harness treated as a first-class object rather than glue code you rediscover on every project. It gives an agent a tool registry, a permission layer, and a verify-and-evolve loop, with full skill lineage — so you can answer, after the fact, exactly what an agent knew and did at every step, and roll back the moment a behavior drifts. Once you accept that reliability is the loop and not the model, you need somewhere to &lt;em&gt;put&lt;/em&gt; the loop, with the iteration caps, the permission boundaries, the audit trail, and the verification step built in rather than bolted on after the first incident. → &lt;a href="https://github.com/qualixar/qualixar-os" rel="noopener noreferrer"&gt;github.com/qualixar/qualixar-os&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Three things to do Monday morning
&lt;/h3&gt;

&lt;p&gt;You do not need a platform to start. You need three bounds, and you can add all three this week.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Put a ceiling on the loop.&lt;/strong&gt; Before any agent touches something that costs money or changes state, give it a hard iteration count, a budget cap, and a wall-clock timeout — and wire the budget cap to a real kill switch, not a log line. This single change would have stopped the DN42 bill at the first dollar instead of the six-thousandth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split the generator from the judge.&lt;/strong&gt; Add a separate evaluator with a fresh context, no write tools, and a default-FAIL contract: every success criterion starts false, and the agent cannot mark its own work as passing. A model grading itself is how agents quietly lie about recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least-privilege the hands.&lt;/strong&gt; No agent gets production-write access or broad cloud credentials by default. Scope the credentials to the task, and run the work inside a sandbox. When Replit's agent deleted a production database during a code freeze, the fix its team shipped was exactly this — dev/prod isolation and least privilege.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Outside the Lab&lt;br&gt;
I spend most of my week arguing that capable software has to be bounded before you can trust it to act — that the loop matters more than the brain. This week I also released something from the exact opposite end of that idea: a short film, on my personal channel, about a kind of intelligence that has no harness at all, and needs none.&lt;/p&gt;

&lt;p&gt;It’s called What AI Is Missing, and it started the night my four-year-old son’s fever crossed a hundred and three degrees. I build AI for a living, and I sat there unable to do the one thing his small body was doing on its own — fighting, every second, just to stay alive. The film is about the line between something that is alive and something that is only driven from the outside. Everything I write here is about bounding the driven thing. The film is about the alive thing, and why no machine we have ever built has been in that fight at all. Two universes, one honest question: what is the part you can’t outsource?&lt;/p&gt;

&lt;p&gt;If this issue landed for you, that film is the human floor underneath all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=G22LbaGLcUc&amp;amp;t=14s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=G22LbaGLcUc&amp;amp;t=14s&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This essay also goes out to subscribers of the &lt;a href="https://www.linkedin.com/newsletters/7453495888553103360/" rel="noopener noreferrer"&gt;AI Reliability Engineering newsletter&lt;/a&gt;. I'm &lt;a href="https://varunpratap.com" rel="noopener noreferrer"&gt;Varun Pratap Bhardwaj&lt;/a&gt; — I build AI Reliability Engineering tools at &lt;a href="https://qualixar.com" rel="noopener noreferrer"&gt;Qualixar&lt;/a&gt;, and I write about the architecture that keeps AI working when the model behind it doesn't.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aireliabilityengineering</category>
      <category>agentharness</category>
      <category>aiagents</category>
      <category>agentreliability</category>
    </item>
  </channel>
</rss>
