<?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: Glendel Joubert Fyne Acosta</title>
    <description>The latest articles on DEV Community by Glendel Joubert Fyne Acosta (@glendel).</description>
    <link>https://dev.to/glendel</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%2F3918728%2F08510cdb-8e5a-4538-882e-6d927d1f09e5.png</url>
      <title>DEV Community: Glendel Joubert Fyne Acosta</title>
      <link>https://dev.to/glendel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/glendel"/>
    <language>en</language>
    <item>
      <title>AI Agents Don't Need More Memory. They Need Governed Recall.</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Thu, 18 Jun 2026 01:51:06 +0000</pubDate>
      <link>https://dev.to/glendel/ai-agents-dont-need-more-memory-they-need-governed-recall-3p73</link>
      <guid>https://dev.to/glendel/ai-agents-dont-need-more-memory-they-need-governed-recall-3p73</guid>
      <description>&lt;p&gt;Most AI Agent Memory discussions start from the same assumption:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the agent forgets, give it more memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;More chat history.&lt;/li&gt;
&lt;li&gt;More retrieved documents.&lt;/li&gt;
&lt;li&gt;More summaries.&lt;/li&gt;
&lt;li&gt;More vector storage.&lt;/li&gt;
&lt;li&gt;More context window.&lt;/li&gt;
&lt;li&gt;More persistence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the more I look at real agent workflows, the more I think this framing is incomplete.&lt;/p&gt;

&lt;p&gt;The hard problem is not simply giving agents more memory.&lt;/p&gt;

&lt;p&gt;The hard problem is deciding what the agent is allowed to recall.&lt;/p&gt;

&lt;p&gt;That is a different architectural problem.&lt;/p&gt;

&lt;p&gt;And it matters a lot.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;More Memory Is Not Always Better&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At first, adding memory makes agents look smarter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They remember previous conversations.&lt;/li&gt;
&lt;li&gt;They reuse past decisions.&lt;/li&gt;
&lt;li&gt;They recover project details.&lt;/li&gt;
&lt;li&gt;They avoid asking the same questions again.&lt;/li&gt;
&lt;li&gt;They feel more continuous.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But after a while, something strange happens.&lt;/p&gt;

&lt;p&gt;The agent starts getting worse.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It recalls stale assumptions.&lt;/li&gt;
&lt;li&gt;It treats old context as current state.&lt;/li&gt;
&lt;li&gt;It uses generated summaries as if they were facts.&lt;/li&gt;
&lt;li&gt;It mixes user preferences with workflow evidence.&lt;/li&gt;
&lt;li&gt;It retrieves private or irrelevant information.&lt;/li&gt;
&lt;li&gt;It acts on something that was true yesterday, but false today.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent is not failing because it forgot.&lt;/p&gt;

&lt;p&gt;It is failing because it remembered without governance.&lt;/p&gt;

&lt;p&gt;That is the uncomfortable truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More memory can make agents less reliable.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Real Problem Is Recall&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Memory is usually framed as a storage problem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where do we store it ?&lt;/li&gt;
&lt;li&gt;A vector database ?&lt;/li&gt;
&lt;li&gt;A relational database ?&lt;/li&gt;
&lt;li&gt;Files ?&lt;/li&gt;
&lt;li&gt;A graph ?&lt;/li&gt;
&lt;li&gt;A long context window ?&lt;/li&gt;
&lt;li&gt;A model's own weights ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are important implementation choices, but they do not answer the deeper question.&lt;/p&gt;

&lt;p&gt;For any specific task, the system still needs to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should be recalled ?&lt;/li&gt;
&lt;li&gt;Who is allowed to recall it ?&lt;/li&gt;
&lt;li&gt;Is it still fresh ?&lt;/li&gt;
&lt;li&gt;Where did it come from ?&lt;/li&gt;
&lt;li&gt;What authority does it have ?&lt;/li&gt;
&lt;li&gt;Does newer evidence override it ?&lt;/li&gt;
&lt;li&gt;Should it be shown to this agent ?&lt;/li&gt;
&lt;li&gt;Should it affect this decision ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not just retrieval.&lt;/p&gt;

&lt;p&gt;That is recall policy.&lt;/p&gt;

&lt;p&gt;And recall policy is where agent memory becomes a runtime architecture problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Retrieval Is Not Governance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A retrieval system can answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What information is semantically similar to this query ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But an agent memory system needs to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What information is this agent allowed to use for this task right now ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are not the same question.&lt;/p&gt;

&lt;p&gt;Semantic similarity is useful, but it is not enough.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A stale memory can be semantically relevant.&lt;/li&gt;
&lt;li&gt;A private document can be semantically relevant.&lt;/li&gt;
&lt;li&gt;A low-authority summary can be semantically relevant.&lt;/li&gt;
&lt;li&gt;A model-generated assumption can be semantically relevant.&lt;/li&gt;
&lt;li&gt;A superseded workflow state can be semantically relevant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That does not mean it should enter the prompt.&lt;/p&gt;

&lt;p&gt;Retrieval finds candidates.&lt;/p&gt;

&lt;p&gt;Governed recall decides what is allowed to become active.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Needs Authority&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Not all memory should have the same power over future agent behavior.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A previous chat message is not the same as a tool result.&lt;/li&gt;
&lt;li&gt;A generated summary is not the same as an approved policy.&lt;/li&gt;
&lt;li&gt;A model assumption is not the same as runtime evidence.&lt;/li&gt;
&lt;li&gt;A user preference is not the same as workflow state.&lt;/li&gt;
&lt;li&gt;A retrieved document is not automatically more trustworthy than a current system record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet many agent systems flatten these into the same prompt as plain text.&lt;/p&gt;

&lt;p&gt;Once that happens, the model has to infer authority from language.&lt;/p&gt;

&lt;p&gt;That is fragile.&lt;/p&gt;

&lt;p&gt;A production memory system should distinguish between different kinds of memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runtime evidence&lt;/li&gt;
&lt;li&gt;Workflow state&lt;/li&gt;
&lt;li&gt;Approved policies&lt;/li&gt;
&lt;li&gt;User preferences&lt;/li&gt;
&lt;li&gt;Retrieved knowledge&lt;/li&gt;
&lt;li&gt;Generated summaries&lt;/li&gt;
&lt;li&gt;Model assumptions&lt;/li&gt;
&lt;li&gt;Prior messages&lt;/li&gt;
&lt;li&gt;External observations&lt;/li&gt;
&lt;li&gt;Human approvals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These should not enter context as equal facts.&lt;/p&gt;

&lt;p&gt;The runtime should preserve their authority before the model reasons over them.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Runtime Evidence Should Beat Model Assumptions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This boundary is critical.&lt;/p&gt;

&lt;p&gt;If the model says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I sent the email".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a claim.&lt;/p&gt;

&lt;p&gt;If the email API returns a message ID and timestamp, that is evidence.&lt;/p&gt;

&lt;p&gt;If the model says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The customer probably prefers option A".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is an assumption.&lt;/p&gt;

&lt;p&gt;If the customer explicitly selected option B in a form, that is evidence.&lt;/p&gt;

&lt;p&gt;If the model says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This task is already complete".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a claim.&lt;/p&gt;

&lt;p&gt;If the workflow state shows required artifacts are missing, the task is not complete.&lt;/p&gt;

&lt;p&gt;Agent systems become dangerous when claims, assumptions, summaries, and evidence all enter memory with the same authority.&lt;/p&gt;

&lt;p&gt;Governed recall means the system knows the difference.&lt;/p&gt;

&lt;p&gt;The model can reason.&lt;/p&gt;

&lt;p&gt;But the runtime should know what actually happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Freshness Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A memory can be true and still be dangerous.&lt;/p&gt;

&lt;p&gt;Because it may no longer be true.&lt;/p&gt;

&lt;p&gt;This is one of the biggest problems in long-running agent workflows.&lt;/p&gt;

&lt;p&gt;An agent may remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The deployment is blocked".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the deployment was unblocked an hour ago.&lt;/p&gt;

&lt;p&gt;It may remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The customer has not paid".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But payment cleared this morning.&lt;/p&gt;

&lt;p&gt;It may remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Approval is still pending".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But approval was granted yesterday.&lt;/p&gt;

&lt;p&gt;It may remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The user prefers short answers".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that preference may apply only to casual updates, not technical reports.&lt;/p&gt;

&lt;p&gt;Freshness is not a small detail.&lt;/p&gt;

&lt;p&gt;It determines whether memory should still influence behavior.&lt;/p&gt;

&lt;p&gt;A memory system should not only ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we seen something like this before ?"&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Is this still valid ?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Scope Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;An organization does not give every person access to every memory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A finance role sees different information than a support role.&lt;/li&gt;
&lt;li&gt;A contractor sees different information than an executive.&lt;/li&gt;
&lt;li&gt;A customer-facing workflow sees different context than an internal strategy workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI Agents need the same boundaries.&lt;/p&gt;

&lt;p&gt;Memory should be scoped by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent role&lt;/li&gt;
&lt;li&gt;User&lt;/li&gt;
&lt;li&gt;Organization&lt;/li&gt;
&lt;li&gt;Workflow&lt;/li&gt;
&lt;li&gt;Task&lt;/li&gt;
&lt;li&gt;Permission level&lt;/li&gt;
&lt;li&gt;Data sensitivity&lt;/li&gt;
&lt;li&gt;Operational context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without scope, memory becomes a leak.&lt;/p&gt;

&lt;p&gt;The issue is not only that the agent may retrieve the wrong information.&lt;/p&gt;

&lt;p&gt;The issue is that the agent may retrieve information it should never have seen.&lt;/p&gt;

&lt;p&gt;In real systems, memory access is authorization.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Provenance Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A memory without provenance is dangerous because the system no longer knows how much to trust it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did this memory come from ?&lt;/li&gt;
&lt;li&gt;Was it written by a human ?&lt;/li&gt;
&lt;li&gt;Was it inferred by a model ?&lt;/li&gt;
&lt;li&gt;Was it extracted from a document ?&lt;/li&gt;
&lt;li&gt;Was it generated as a summary ?&lt;/li&gt;
&lt;li&gt;Was it produced by a tool call ?&lt;/li&gt;
&lt;li&gt;Was it approved ?&lt;/li&gt;
&lt;li&gt;Was it observed ?&lt;/li&gt;
&lt;li&gt;Was it imported from an external system ?&lt;/li&gt;
&lt;li&gt;Was it created during a failed workflow ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These distinctions matter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A model-generated summary should not carry the same weight as the original source.&lt;/li&gt;
&lt;li&gt;A user comment should not carry the same weight as an approved policy.&lt;/li&gt;
&lt;li&gt;A tool result should not carry the same weight as a model's interpretation of that result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provenance is what prevents memory from becoming anonymous context.&lt;/p&gt;

&lt;p&gt;And anonymous context is hard to trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Model Should Not Govern Its Own Recall&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One tempting pattern is to give the model access to a memory store and ask it to decide what it needs.&lt;/p&gt;

&lt;p&gt;This can work in demos.&lt;/p&gt;

&lt;p&gt;But for real workflows, it creates a weak boundary.&lt;/p&gt;

&lt;p&gt;The same probabilistic system that will reason over the memory is also deciding what memory it should see.&lt;/p&gt;

&lt;p&gt;That is risky. The model may retrieve too much.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It may retrieve stale context.&lt;/li&gt;
&lt;li&gt;It may retrieve unauthorized context.&lt;/li&gt;
&lt;li&gt;It may overvalue its own previous assumptions.&lt;/li&gt;
&lt;li&gt;It may ignore stronger runtime evidence.&lt;/li&gt;
&lt;li&gt;It may fail to notice that a memory has been superseded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the runtime needs to sit between memory and the model.&lt;/p&gt;

&lt;p&gt;The model should not receive memory just because memory exists.&lt;/p&gt;

&lt;p&gt;The runtime should curate recall.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Governed Recall&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Governed recall means memory access is controlled before context reaches the model.&lt;/p&gt;

&lt;p&gt;The runtime asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this memory relevant to the current task ?&lt;/li&gt;
&lt;li&gt;Is the agent allowed to see it ?&lt;/li&gt;
&lt;li&gt;Is it fresh enough ?&lt;/li&gt;
&lt;li&gt;What is its source ?&lt;/li&gt;
&lt;li&gt;What authority does it carry ?&lt;/li&gt;
&lt;li&gt;Does stronger evidence override it ?&lt;/li&gt;
&lt;li&gt;Is it scoped to this workflow ?&lt;/li&gt;
&lt;li&gt;Has it expired ?&lt;/li&gt;
&lt;li&gt;Has it been superseded ?&lt;/li&gt;
&lt;li&gt;Should it be summarized ?&lt;/li&gt;
&lt;li&gt;Should it be hidden ?&lt;/li&gt;
&lt;li&gt;Should it trigger a human review ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only after those checks should memory enter the model context.&lt;/p&gt;

&lt;p&gt;This is the difference between retrieval and governed recall.&lt;/p&gt;

&lt;p&gt;Retrieval says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks similar".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Governed recall says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is allowed, relevant, current, scoped, and trustworthy enough to influence this task".&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Is Policy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once agents start operating inside real workflows, memory becomes policy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the agent remembers determines what it believes.&lt;/li&gt;
&lt;li&gt;What it believes influences what it does.&lt;/li&gt;
&lt;li&gt;What it does affects real systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So memory is not neutral.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is an operational control surface.&lt;/li&gt;
&lt;li&gt;If an agent recalls the wrong thing, it may take the wrong action.&lt;/li&gt;
&lt;li&gt;If it recalls stale state, it may repeat work.&lt;/li&gt;
&lt;li&gt;If it recalls private information, it may leak data.&lt;/li&gt;
&lt;li&gt;If it recalls a weak assumption as fact, it may produce bad decisions.&lt;/li&gt;
&lt;li&gt;If it fails to recall an obligation at the right time, it may miss a commitment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Memory shapes behavior.&lt;/p&gt;

&lt;p&gt;That means memory needs governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Future Problem: Knowing When to Remember&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There is another layer beyond what to recall.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When should memory become active ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most systems retrieve memory reactively.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A user asks something.&lt;/li&gt;
&lt;li&gt;The system searches.&lt;/li&gt;
&lt;li&gt;The model receives context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But many organizational workflows require memory to activate later.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Follow up with this customer if payment has not cleared by Friday".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not just a fact to store.&lt;/p&gt;

&lt;p&gt;It is an intention with future activation conditions.&lt;/p&gt;

&lt;p&gt;The memory should become relevant when time passes or when an event happens.&lt;/p&gt;

&lt;p&gt;Most systems solve this with cron jobs, workflow engines, reminders, or external orchestration.&lt;/p&gt;

&lt;p&gt;That works, but it shows something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agent memory is not only about answering questions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes memory needs to trigger action.&lt;/p&gt;

&lt;p&gt;That is a much deeper problem.&lt;/p&gt;

&lt;p&gt;And it is one of the reasons memory belongs in the runtime architecture, not only in the prompt.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;A Better Mental Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The agent has memory".&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"The system governs what the agent can recall".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This small shift changes the design.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The model is no longer treated as the owner of memory.&lt;/li&gt;
&lt;li&gt;The runtime owns memory access.&lt;/li&gt;
&lt;li&gt;The workflow owns state.&lt;/li&gt;
&lt;li&gt;The tools produce evidence.&lt;/li&gt;
&lt;li&gt;Permissions define boundaries.&lt;/li&gt;
&lt;li&gt;Policies define authority.&lt;/li&gt;
&lt;li&gt;The model receives curated context and reasons over it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a much safer architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why This Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The AI World is moving very fast.&lt;/p&gt;

&lt;p&gt;Every week, a new model appears.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A better brain.&lt;/li&gt;
&lt;li&gt;A larger context window.&lt;/li&gt;
&lt;li&gt;A stronger coding model.&lt;/li&gt;
&lt;li&gt;A faster reasoning model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those improvements matter.&lt;/p&gt;

&lt;p&gt;But smarter brains are not enough.&lt;/p&gt;

&lt;p&gt;If AI Agents are going to operate inside real organizations, they need architecture around them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They need permissions.&lt;/li&gt;
&lt;li&gt;They need runtime boundaries.&lt;/li&gt;
&lt;li&gt;They need workflow state.&lt;/li&gt;
&lt;li&gt;They need evidence.&lt;/li&gt;
&lt;li&gt;They need memory governance.&lt;/li&gt;
&lt;li&gt;They need recall policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A powerful model without governed recall can still act on stale, unauthorized, or low-authority context.&lt;/p&gt;

&lt;p&gt;That is not an intelligence problem.&lt;/p&gt;

&lt;p&gt;That is a Systems Engineering problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thought&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI agents do not need more memory by default.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They need better rules for what memory is allowed to become active.&lt;/li&gt;
&lt;li&gt;They need memory with scope, provenance, freshness, permissions, authority, and evidence.&lt;/li&gt;
&lt;li&gt;They need runtime-governed recall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the real question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How much can the agent remember ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The real question is:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can we trust what the agent is allowed to recall ?"&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>multiagent</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI Agent Memory Is Not Chat History</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Thu, 11 Jun 2026 00:12:05 +0000</pubDate>
      <link>https://dev.to/glendel/ai-agent-memory-is-not-chat-history-4jjb</link>
      <guid>https://dev.to/glendel/ai-agent-memory-is-not-chat-history-4jjb</guid>
      <description>&lt;p&gt;Most AI agent systems start with a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's give the Agent Memory".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first, this usually means saving previous messages, retrieving similar chunks, and injecting them back into the prompt.&lt;/p&gt;

&lt;p&gt;That works for demos.&lt;/p&gt;

&lt;p&gt;It does not work reliably for real organizational workflows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Because chat history is not memory.&lt;/li&gt;
&lt;li&gt;A vector database is not memory.&lt;/li&gt;
&lt;li&gt;A bigger context window is not memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are storage and retrieval mechanisms. Useful, yes. But memory in an AI Agent System is not just about remembering more information.&lt;/p&gt;

&lt;p&gt;It is about deciding what should influence future behavior.&lt;/p&gt;

&lt;p&gt;And that is a much harder problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Simple Version&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When people say "Agent Memory", they often mix together very different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversation history&lt;/li&gt;
&lt;li&gt;User preferences&lt;/li&gt;
&lt;li&gt;Workflow state&lt;/li&gt;
&lt;li&gt;Previous tool results&lt;/li&gt;
&lt;li&gt;Retrieved documents&lt;/li&gt;
&lt;li&gt;Task summaries&lt;/li&gt;
&lt;li&gt;Business rules&lt;/li&gt;
&lt;li&gt;Approved policies&lt;/li&gt;
&lt;li&gt;Model-generated assumptions&lt;/li&gt;
&lt;li&gt;Evidence of completed actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these should not all be treated the same way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user saying "I usually prefer short answers" is not the same kind of memory as "invoice #123 was paid".&lt;/li&gt;
&lt;li&gt;A model saying "the client is probably interested" is not the same as a CRM record.&lt;/li&gt;
&lt;li&gt;A previous chat message is not the same as a runtime audit log.&lt;/li&gt;
&lt;li&gt;An approved company policy is not the same as a generated summary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When all of these are thrown into the same context window, the agent may look smarter for a while.&lt;/p&gt;

&lt;p&gt;Then it slowly becomes unreliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;More Context Can Make Agents Worse&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A common instinct is to give the agent more context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More history.&lt;/li&gt;
&lt;li&gt;More documents.&lt;/li&gt;
&lt;li&gt;More summaries.&lt;/li&gt;
&lt;li&gt;More retrieved chunks.&lt;/li&gt;
&lt;li&gt;More memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But more context does not automatically mean better reasoning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes it means more noise.&lt;/li&gt;
&lt;li&gt;Sometimes it means stale information.&lt;/li&gt;
&lt;li&gt;Sometimes it means private information leaking into the wrong task.&lt;/li&gt;
&lt;li&gt;Sometimes it means the model starts treating old assumptions as current facts.&lt;/li&gt;
&lt;li&gt;Sometimes it means low-authority memory overrides high-authority evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is one of the strange things about AI Agents:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Agent can become worse because it remembers too much without knowing what should matter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem is not only forgetting.&lt;/p&gt;

&lt;p&gt;The problem is remembering without governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Needs Scope&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A human organization does not give every worker access to every memory.&lt;/li&gt;
&lt;li&gt;A sales person does not automatically see payroll data.&lt;/li&gt;
&lt;li&gt;A support agent does not automatically see executive board notes.&lt;/li&gt;
&lt;li&gt;A contractor does not automatically see internal security policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Access depends on role, task, permission, and context.&lt;/p&gt;

&lt;p&gt;AI agents need the same kind of boundaries.&lt;/p&gt;

&lt;p&gt;If an agent has a role, its memory should be scoped to that role.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A finance agent should not recall unrelated HR details.&lt;/li&gt;
&lt;li&gt;A support agent should not receive private strategy documents unless explicitly authorized.&lt;/li&gt;
&lt;li&gt;A research agent should not inherit operational permissions just because it saw previous context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Memory without scope becomes a data leak waiting to happen.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Needs Provenance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Not all memory has the same authority.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did this memory come from ?&lt;/li&gt;
&lt;li&gt;Was it written by a user ?&lt;/li&gt;
&lt;li&gt;Was it retrieved from a document ?&lt;/li&gt;
&lt;li&gt;Was it produced by another agent ?&lt;/li&gt;
&lt;li&gt;Was it inferred by a model ?&lt;/li&gt;
&lt;li&gt;Was it approved by a human ?&lt;/li&gt;
&lt;li&gt;Was it produced by a tool execution ?&lt;/li&gt;
&lt;li&gt;Was it recorded by the runtime ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These distinctions matter.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"The agent thinks the customer is unhappy".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is not the same as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The customer wrote: 'I am unhappy with the delay'".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And neither of those is the same as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A support ticket was escalated by a human manager".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the system does not track provenance, the model may treat all memory as equally trustworthy.&lt;/p&gt;

&lt;p&gt;That is dangerous.&lt;/p&gt;

&lt;p&gt;A model-generated assumption should not have the same authority as runtime evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Needs Freshness&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Some memories expire.&lt;/li&gt;
&lt;li&gt;Some facts change.&lt;/li&gt;
&lt;li&gt;Some decisions are superseded.&lt;/li&gt;
&lt;li&gt;Some preferences are temporary.&lt;/li&gt;
&lt;li&gt;Some business rules are updated.&lt;/li&gt;
&lt;li&gt;Some project states become obsolete.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the memory layer does not understand freshness, agents can become confidently wrong.&lt;/p&gt;

&lt;p&gt;This is especially dangerous in long-running workflows.&lt;/p&gt;

&lt;p&gt;An agent might remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The client prefers option A".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But maybe the client changed their mind yesterday.&lt;/p&gt;

&lt;p&gt;An agent might remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The deployment is blocked".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But maybe the deployment was completed two hours ago.&lt;/p&gt;

&lt;p&gt;An agent might remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This task is waiting for approval".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But maybe approval was already granted.&lt;/p&gt;

&lt;p&gt;Memory should not only answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have I seen something like this before ?"&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Is this still true ?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Needs Authority Levels&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A production agent memory system should distinguish between different authority levels.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Runtime Evidence:&lt;/strong&gt;&lt;br&gt;
What actually happened: tool calls, outputs, timestamps, approvals, errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Approved Knowledge:&lt;/strong&gt;&lt;br&gt;
Policies, procedures, user-approved facts, business rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Observed Facts:&lt;/strong&gt;&lt;br&gt;
Information extracted from emails, documents, tickets, repositories, databases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User Preferences:&lt;/strong&gt;&lt;br&gt;
Stable preferences explicitly stated by the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generated Summaries:&lt;/strong&gt;&lt;br&gt;
Useful compression, but lossy and potentially wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model Assumptions:&lt;/strong&gt;&lt;br&gt;
Hypotheses, guesses, interpretations, incomplete reasoning.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These should not have equal weight.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A generated summary should not override a tool result.&lt;/li&gt;
&lt;li&gt;A model assumption should not override a policy.&lt;/li&gt;
&lt;li&gt;A retrieved chunk should not override a runtime audit log.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Memory needs hierarchy.&lt;/p&gt;

&lt;p&gt;Otherwise the agent is just reasoning over a pile of mixed authority text.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Workflow State Is Not Memory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One major mistake is treating workflow state as memory.&lt;/p&gt;

&lt;p&gt;Workflow state is not "something the agent remembers".&lt;/p&gt;

&lt;p&gt;Workflow state is something the system owns.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Current step&lt;/li&gt;
&lt;li&gt;Completed step&lt;/li&gt;
&lt;li&gt;Failed step&lt;/li&gt;
&lt;li&gt;Pending approval&lt;/li&gt;
&lt;li&gt;Retry count&lt;/li&gt;
&lt;li&gt;Tool result&lt;/li&gt;
&lt;li&gt;Assigned agent&lt;/li&gt;
&lt;li&gt;Deadline&lt;/li&gt;
&lt;li&gt;Execution status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This should not depend on the model remembering correctly.&lt;/p&gt;

&lt;p&gt;The runtime should know.&lt;/p&gt;

&lt;p&gt;If an agent claims:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I sent the email".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system should be able to verify whether the email was actually sent.&lt;/p&gt;

&lt;p&gt;If an agent claims:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The task is complete".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system should be able to check whether the required artifact exists.&lt;/p&gt;

&lt;p&gt;If an agent claims:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I already asked for approval".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system should know whether an approval request was actually created.&lt;/p&gt;

&lt;p&gt;Workflow state belongs outside the model.&lt;/p&gt;

&lt;p&gt;The model can reason about state.&lt;/p&gt;

&lt;p&gt;But the runtime should own state.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Memory Is Not Just Retrieval&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;RAG is useful.&lt;/li&gt;
&lt;li&gt;Vector search is useful.&lt;/li&gt;
&lt;li&gt;Embeddings are useful.&lt;/li&gt;
&lt;li&gt;Long context is useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But none of them solve memory by themselves.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"What information is semantically similar to this query ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent memory needs to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What information should this agent be allowed to use for this task right now ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a different question.&lt;/p&gt;

&lt;p&gt;A memory system should consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relevance&lt;/li&gt;
&lt;li&gt;Permission&lt;/li&gt;
&lt;li&gt;Freshness&lt;/li&gt;
&lt;li&gt;Provenance&lt;/li&gt;
&lt;li&gt;Authority&lt;/li&gt;
&lt;li&gt;Task scope&lt;/li&gt;
&lt;li&gt;Privacy&lt;/li&gt;
&lt;li&gt;Retention&lt;/li&gt;
&lt;li&gt;Evidence&lt;/li&gt;
&lt;li&gt;Lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without those controls, memory becomes a context injection mechanism.&lt;/p&gt;

&lt;p&gt;And context injection is not governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Runtime Should Curate Memory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In a reliable AI Agent System, the model should not receive memory simply because memory exists.&lt;/p&gt;

&lt;p&gt;There should be a runtime or context layer that decides what enters the prompt.&lt;/p&gt;

&lt;p&gt;That layer should ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this memory relevant to the current task ?&lt;/li&gt;
&lt;li&gt;Is this agent allowed to access it ?&lt;/li&gt;
&lt;li&gt;Is this memory still valid ?&lt;/li&gt;
&lt;li&gt;What source created it ?&lt;/li&gt;
&lt;li&gt;What authority level does it have ?&lt;/li&gt;
&lt;li&gt;Has it expired ?&lt;/li&gt;
&lt;li&gt;Has it been superseded ?&lt;/li&gt;
&lt;li&gt;Does it conflict with stronger evidence ?&lt;/li&gt;
&lt;li&gt;Should this memory be summarized or passed directly ?&lt;/li&gt;
&lt;li&gt;Should this memory be hidden from the model ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where agent memory becomes an architectural problem.&lt;/p&gt;

&lt;p&gt;It is not just about storing text.&lt;/p&gt;

&lt;p&gt;It is about governing recall.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;A Better Mental Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The agent has memory".&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"The system controls what the agent is allowed to recall".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That small shift changes the architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent does not own memory.&lt;/li&gt;
&lt;li&gt;The runtime owns memory access.&lt;/li&gt;
&lt;li&gt;The model reasons.&lt;/li&gt;
&lt;li&gt;The runtime curates context.&lt;/li&gt;
&lt;li&gt;The system records evidence.&lt;/li&gt;
&lt;li&gt;The workflow tracks state.&lt;/li&gt;
&lt;li&gt;Permissions control access.&lt;/li&gt;
&lt;li&gt;Policies define boundaries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This separation is important because models are probabilistic.&lt;/p&gt;

&lt;p&gt;Memory governance should not be.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;A Practical Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A more reliable Agent Memory Architecture might separate memory into layers:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Conversation Context:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Recent interaction history.&lt;/p&gt;

&lt;p&gt;Useful for continuity.&lt;/p&gt;

&lt;p&gt;Not authoritative by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Working State:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The current task state.&lt;/p&gt;

&lt;p&gt;Owned by the runtime, not the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Episodic Memory:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Past events and interactions.&lt;/p&gt;

&lt;p&gt;Useful, but should include timestamps, sources, and scope.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Semantic Knowledge:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Documents, knowledge bases, policies, procedures.&lt;/p&gt;

&lt;p&gt;Should include provenance and authority.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Runtime Evidence:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tool calls, approvals, outputs, logs, completed actions.&lt;/p&gt;

&lt;p&gt;This should have higher authority than model claims.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6. Preferences:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;User or organization preferences.&lt;/p&gt;

&lt;p&gt;Should be explicit, scoped, and editable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;7. Summaries:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Compressed context.&lt;/p&gt;

&lt;p&gt;Useful, but lossy. Should not be treated as truth without source references.&lt;/p&gt;

&lt;p&gt;The key is not only storing these separately.&lt;/p&gt;

&lt;p&gt;The key is applying different rules to each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why This Matters More in Multi-Agent Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Memory gets even harder when Multiple Agents are involved.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If Agent A writes something into shared memory, should Agent B trust it ?&lt;/li&gt;
&lt;li&gt;Should Agent B see it ?&lt;/li&gt;
&lt;li&gt;Was it an observation, an inference, or a completed action ?&lt;/li&gt;
&lt;li&gt;Did a human approve it ?&lt;/li&gt;
&lt;li&gt;Was it generated from stale context ?&lt;/li&gt;
&lt;li&gt;Was it meant to be private to one workflow ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Multi-Agent Systems, memory becomes a coordination surface.&lt;/p&gt;

&lt;p&gt;Bad memory can propagate across agents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One agent makes an assumption.&lt;/li&gt;
&lt;li&gt;Another agent reads it as fact.&lt;/li&gt;
&lt;li&gt;A third agent acts on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the system has transformed an uncertain inference into operational behavior.&lt;/p&gt;

&lt;p&gt;That is how Unreliable Agent Systems drift.&lt;/p&gt;

&lt;p&gt;Multi-Agent Memory needs boundaries, ownership, and evidence.&lt;/p&gt;

&lt;p&gt;Not just shared context.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Real Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The real problem is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do we make agents remember more ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The real problem is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do we make agents remember safely ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means memory must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scoped&lt;/li&gt;
&lt;li&gt;Permissioned&lt;/li&gt;
&lt;li&gt;Current&lt;/li&gt;
&lt;li&gt;Traceable&lt;/li&gt;
&lt;li&gt;Auditable&lt;/li&gt;
&lt;li&gt;Ranked by authority&lt;/li&gt;
&lt;li&gt;Connected to evidence&lt;/li&gt;
&lt;li&gt;Separated from workflow state&lt;/li&gt;
&lt;li&gt;Governed by runtime rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this, agent memory becomes another source of hallucination.&lt;/p&gt;

&lt;p&gt;A very convincing one.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thought&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AI agent memory is not chat history.&lt;/li&gt;
&lt;li&gt;It is not a vector database.&lt;/li&gt;
&lt;li&gt;It is not a bigger context window.&lt;/li&gt;
&lt;li&gt;It is not a pile of summaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real agent memory is governed recall.&lt;/p&gt;

&lt;p&gt;For agents operating inside real organizations, memory must answer more than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What might be useful ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It must also answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is allowed, current, relevant, trustworthy, and supported by evidence ?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;That is the difference between an agent that remembers things and an agent whose memory can be trusted.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiagent</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building AI Workflows Is Easy. Making Them Reliable Is Systems Engineering</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Sat, 30 May 2026 02:14:54 +0000</pubDate>
      <link>https://dev.to/glendel/building-ai-workflows-is-easy-making-them-reliable-is-systems-engineering-19h6</link>
      <guid>https://dev.to/glendel/building-ai-workflows-is-easy-making-them-reliable-is-systems-engineering-19h6</guid>
      <description>&lt;p&gt;Building the first version of an AI workflow is usually easy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect an LLM to a few tools.&lt;/li&gt;
&lt;li&gt;Add some instructions.&lt;/li&gt;
&lt;li&gt;Let the model decide what to do next.&lt;/li&gt;
&lt;li&gt;Run the demo.&lt;/li&gt;
&lt;li&gt;It works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The problem starts later, when that workflow becomes part of a real process.&lt;/p&gt;

&lt;p&gt;Suddenly the important questions are not about the prompt anymore.&lt;/p&gt;

&lt;p&gt;They are about reliability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens when a tool fails ?&lt;/li&gt;
&lt;li&gt;What happens when the model retries the wrong thing ?&lt;/li&gt;
&lt;li&gt;What happens when the workflow changes state but the agent still claims failure ?&lt;/li&gt;
&lt;li&gt;What happens when the agent claims success but no tool actually ran ?&lt;/li&gt;
&lt;li&gt;What happens when one agent hands bad context to another agent ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where AI workflows stop being prompt engineering.&lt;/p&gt;

&lt;p&gt;They become &lt;strong&gt;Systems Engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Demo Is Not The System&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A lot of AI workflow demos optimize for the happy path.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user asks for something.&lt;/li&gt;
&lt;li&gt;The agent thinks.&lt;/li&gt;
&lt;li&gt;The agent calls a tool.&lt;/li&gt;
&lt;li&gt;The tool returns a result.&lt;/li&gt;
&lt;li&gt;The agent summarizes the result.&lt;/li&gt;
&lt;li&gt;Everyone claps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But production workflows do not live on the happy path.&lt;/p&gt;

&lt;p&gt;They live in the messy reality of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Partial failures&lt;/li&gt;
&lt;li&gt;Bad inputs&lt;/li&gt;
&lt;li&gt;Timeout errors&lt;/li&gt;
&lt;li&gt;Invalid tool responses&lt;/li&gt;
&lt;li&gt;Duplicate retries&lt;/li&gt;
&lt;li&gt;Missing context&lt;/li&gt;
&lt;li&gt;Permission denials&lt;/li&gt;
&lt;li&gt;State inconsistencies&lt;/li&gt;
&lt;li&gt;Cost limits&lt;/li&gt;
&lt;li&gt;Human approvals&lt;/li&gt;
&lt;li&gt;Recovery paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first version proves that the idea is possible.&lt;/p&gt;

&lt;p&gt;The production version needs to prove that the system is dependable.&lt;/p&gt;

&lt;p&gt;Those are very different goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Prompts Can Guide Reasoning. They Cannot Manage Reliability.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Prompts are important.&lt;/p&gt;

&lt;p&gt;They help the model understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What role it is playing&lt;/li&gt;
&lt;li&gt;What goal it should pursue&lt;/li&gt;
&lt;li&gt;How it should reason&lt;/li&gt;
&lt;li&gt;What tone it should use&lt;/li&gt;
&lt;li&gt;What constraints it should consider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But prompts should not be responsible for the reliability of the whole workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A prompt should not be the only thing preventing an unsafe action.&lt;/p&gt;

&lt;p&gt;A prompt should not be the only thing remembering which step already completed.&lt;/p&gt;

&lt;p&gt;A prompt should not be the only thing deciding whether a retry is safe.&lt;/p&gt;

&lt;p&gt;A prompt should not be the only thing proving that a tool actually executed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once an AI workflow affects real systems, the runtime needs to take responsibility for the parts that require consistency.&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;The model can reason. The system must govern.&lt;/strong&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Core Split: Reasoning, Execution, State, Evidence&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A reliable AI workflow needs a clean separation between four concerns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning:&lt;/strong&gt; The model handles reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution:&lt;/strong&gt; The runtime handles execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; The workflow engine manages state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; The audit layer records evidence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When these responsibilities are mixed together, debugging becomes painful.&lt;/p&gt;

&lt;p&gt;For example, this is fragile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
  Read the customer complaint,
  decide whether it needs escalation,
  send the email if needed,
  and tell me when you're done.
`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because too much is hidden inside one probabilistic step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the agent actually send the email ?&lt;/li&gt;
&lt;li&gt;Was the action allowed ?&lt;/li&gt;
&lt;li&gt;Was the customer data valid ?&lt;/li&gt;
&lt;li&gt;Did the escalation rule trigger ?&lt;/li&gt;
&lt;li&gt;Did the email tool fail ?&lt;/li&gt;
&lt;li&gt;Was the final response based on evidence or assumption ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A more reliable architecture separates the work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Should this complaint be escalated?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;context&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;send_escalation_email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;complaint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recordDeniedAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;escalationTeam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;complaint_escalation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;complaintId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;complaint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;evidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;execution&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;evidenceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;executionStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is less magical.&lt;/p&gt;

&lt;p&gt;It is also much easier to trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Retry Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Retries are one of the most underestimated problems in AI workflows.&lt;/p&gt;

&lt;p&gt;In traditional software, retrying a failed API call is usually straightforward.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the request times out, try again.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But AI workflows introduce different kinds of failure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tool call failing is not the same as a model reasoning step failing.&lt;/li&gt;
&lt;li&gt;A network timeout is not the same as a bad plan.&lt;/li&gt;
&lt;li&gt;A malformed JSON response is not the same as missing business context.&lt;/li&gt;
&lt;li&gt;A low-quality answer is not the same as an unavailable dependency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different failures need different retry strategies.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;failure&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tool_timeout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;retrySameToolCall&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;invalid_tool_payload&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;askModelToRepairPayload&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bad_reasoning&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;resetContextAndReplan&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;permission_denied&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;escalateToHuman&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cost_budget_exceeded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;stopWorkflow&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If every failure is handled with "just run the agent again", the system can become expensive, slow, and unreliable.&lt;/p&gt;

&lt;p&gt;Sometimes the correct retry is not retrying.&lt;/p&gt;

&lt;p&gt;Sometimes the correct response is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce scope&lt;/li&gt;
&lt;li&gt;Reset context&lt;/li&gt;
&lt;li&gt;Ask for clarification&lt;/li&gt;
&lt;li&gt;Escalate to a human&lt;/li&gt;
&lt;li&gt;Stop the workflow&lt;/li&gt;
&lt;li&gt;Record the failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cost-aware retries are not just a billing concern.&lt;/p&gt;

&lt;p&gt;They are a reliability concern.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;State Must Be Explicit&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A workflow that cannot explain its current state cannot be reliably recovered.&lt;/p&gt;

&lt;p&gt;If an Agent is halfway through a process, the system should know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which step is running&lt;/li&gt;
&lt;li&gt;Which steps completed&lt;/li&gt;
&lt;li&gt;Which tools executed&lt;/li&gt;
&lt;li&gt;Which outputs were produced&lt;/li&gt;
&lt;li&gt;Which approvals are pending&lt;/li&gt;
&lt;li&gt;Which errors occurred&lt;/li&gt;
&lt;li&gt;What can safely happen next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without explicit state, recovery becomes guesswork.&lt;/p&gt;

&lt;p&gt;This is especially dangerous when the workflow mutates external systems.&lt;/p&gt;

&lt;p&gt;Imagine a workflow that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reads a customer complaint.&lt;/li&gt;
&lt;li&gt;Creates an internal ticket.&lt;/li&gt;
&lt;li&gt;Sends an escalation email.&lt;/li&gt;
&lt;li&gt;Updates the CRM.&lt;/li&gt;
&lt;li&gt;Marks the complaint as handled.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the workflow fails at step 4, what should happen?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should it restart from step 1 ?&lt;/li&gt;
&lt;li&gt;Should it send the email again ?&lt;/li&gt;
&lt;li&gt;Should it create a duplicate ticket ?&lt;/li&gt;
&lt;li&gt;Should it mark the complaint as handled ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answer depends on state.&lt;/p&gt;

&lt;p&gt;Reliable workflows need checkpoints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;checkpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ticket_created&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ticketId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;complaintId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;timestamp&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;checkpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email_sent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;messageId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;timestamp&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checkpoints make recovery possible.&lt;/p&gt;

&lt;p&gt;They also make debugging possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Evidence Beats Claims&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most dangerous failure modes in AI workflows is false completion.&lt;/p&gt;

&lt;p&gt;The agent says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Done, I sent the email."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But no email was sent.&lt;/p&gt;

&lt;p&gt;Or the email tool failed.&lt;/p&gt;

&lt;p&gt;Or permission was denied.&lt;/p&gt;

&lt;p&gt;Or the agent never called the tool.&lt;/p&gt;

&lt;p&gt;The model's final answer is not evidence.&lt;/p&gt;

&lt;p&gt;It is a claim.&lt;/p&gt;

&lt;p&gt;A reliable workflow should be able to prove what happened.&lt;/p&gt;

&lt;p&gt;An evidence record might include:&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;"actor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"support-agent-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"send_email"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"granted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email_sender"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messageId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"msg_123"&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;"2026-05-29T14:32:10Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"auditId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"audit_789"&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;Now the system can answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who acted&lt;/li&gt;
&lt;li&gt;What was requested&lt;/li&gt;
&lt;li&gt;Whether it was allowed&lt;/li&gt;
&lt;li&gt;What executed&lt;/li&gt;
&lt;li&gt;What result came back&lt;/li&gt;
&lt;li&gt;When it happened&lt;/li&gt;
&lt;li&gt;What proves it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the difference between trusting the agent and trusting the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Multi-Agent Workflows Make Reliability Harder&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Multi-Agent Systems (MAS) amplify every reliability problem.&lt;/p&gt;

&lt;p&gt;In a Single-Agent workflow, one model may lose context or make a bad assumption.&lt;/p&gt;

&lt;p&gt;In a Multi-Agent workflow, one agent's unsupported claim can become another agent's input.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Research Agent says it collected the correct data.&lt;/li&gt;
&lt;li&gt;Analyst Agent uses that data to generate a report.&lt;/li&gt;
&lt;li&gt;Reviewer Agent approves the report.&lt;/li&gt;
&lt;li&gt;Communication Agent sends it to the customer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the first claim was wrong, the entire workflow becomes unreliable.&lt;/p&gt;

&lt;p&gt;The final output may look coherent.&lt;/p&gt;

&lt;p&gt;But the foundation is broken.&lt;/p&gt;

&lt;p&gt;That is why Multi-Agent workflows need strong boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit handoffs&lt;/li&gt;
&lt;li&gt;Scoped context&lt;/li&gt;
&lt;li&gt;Evidence records&lt;/li&gt;
&lt;li&gt;Validation gates&lt;/li&gt;
&lt;li&gt;Responsibility tracking&lt;/li&gt;
&lt;li&gt;State checkpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents should not pass vague natural-language summaries to each other as if they were verified facts.&lt;/p&gt;

&lt;p&gt;A good handoff should include:&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;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"research-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"analyst-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"analyze_customer_churn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"artifactId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dataset_456"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidenceId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"audit_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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;"verified"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Q1 customer data only"&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;That is much more reliable than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I collected the data. You can continue."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Observability Is Not Optional&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once AI workflows become operational, observability becomes foundational.&lt;/p&gt;

&lt;p&gt;A useful trace should show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the model intended&lt;/li&gt;
&lt;li&gt;What context it received&lt;/li&gt;
&lt;li&gt;What action it requested&lt;/li&gt;
&lt;li&gt;Whether permission was granted&lt;/li&gt;
&lt;li&gt;What tool executed&lt;/li&gt;
&lt;li&gt;What state changed&lt;/li&gt;
&lt;li&gt;What evidence was recorded&lt;/li&gt;
&lt;li&gt;What the agent claimed afterward&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this, teams end up debugging through transcripts and guesses.&lt;/p&gt;

&lt;p&gt;That does not scale.&lt;/p&gt;

&lt;p&gt;Traditional logs tell you that something happened.&lt;/p&gt;

&lt;p&gt;AI workflow observability needs to explain why something happened, what the model believed, what the runtime allowed, and what actually executed.&lt;/p&gt;

&lt;p&gt;That means observability must include both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning traces&lt;/li&gt;
&lt;li&gt;Runtime evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One without the other is incomplete.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Architecture Pattern&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A production AI workflow should not be one big prompt chain.&lt;/p&gt;

&lt;p&gt;It should look more like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request
     ↓
Intent Resolution
     ↓
Context Assembly
     ↓
Model Reasoning
     ↓
Action Request
     ↓
Permission Check
     ↓
Tool Execution
     ↓
Evidence Record
     ↓
State Checkpoint
     ↓
Agent Summary
     ↓
Verification / Escalation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model is still important.&lt;/p&gt;

&lt;p&gt;But it is no longer responsible for everything.&lt;/p&gt;

&lt;p&gt;It reasons inside a system that manages boundaries, execution, and recovery.&lt;/p&gt;

&lt;p&gt;That is the shift.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AI Workflows Are Operational Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When an AI workflow becomes part of a business process, it needs the same engineering discipline as any other operational system.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Clear inputs&lt;/li&gt;
&lt;li&gt;Explicit state&lt;/li&gt;
&lt;li&gt;Bounded execution&lt;/li&gt;
&lt;li&gt;Permission checks&lt;/li&gt;
&lt;li&gt;Retry policies&lt;/li&gt;
&lt;li&gt;Failure handling&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Audit trails&lt;/li&gt;
&lt;li&gt;Recovery paths&lt;/li&gt;
&lt;li&gt;Verification gates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not bureaucracy.&lt;/p&gt;

&lt;p&gt;This is what makes the workflow dependable.&lt;/p&gt;

&lt;p&gt;The more responsibility we give AI Agents, the more important the surrounding system becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Building an AI workflow is easy.&lt;/p&gt;

&lt;p&gt;Making it reliable is the hard part.&lt;/p&gt;

&lt;p&gt;The future of AI agents will not be won only by better prompts or bigger models.&lt;/p&gt;

&lt;p&gt;It will be won by better runtime architecture.&lt;/p&gt;

&lt;p&gt;Prompts guide reasoning.&lt;/p&gt;

&lt;p&gt;But reliable AI workflows need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkpoints&lt;/li&gt;
&lt;li&gt;Retries&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Execution Boundaries&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Audit Trails&lt;/li&gt;
&lt;li&gt;Evidence&lt;/li&gt;
&lt;li&gt;Recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why production AI workflows are not just prompt engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They are Systems Engineering.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Evidence Beats Claims: Why AI Agents Need Runtime Proof</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Tue, 26 May 2026 01:49:17 +0000</pubDate>
      <link>https://dev.to/glendel/evidence-beats-claims-why-ai-agents-need-runtime-proof-36ep</link>
      <guid>https://dev.to/glendel/evidence-beats-claims-why-ai-agents-need-runtime-proof-36ep</guid>
      <description>&lt;p&gt;An AI agent saying &lt;em&gt;"I did it"&lt;/em&gt; is not proof that anything happened.&lt;/p&gt;

&lt;p&gt;"I sent the email."&lt;/p&gt;

&lt;p&gt;"I updated the database."&lt;/p&gt;

&lt;p&gt;"I escalated the issue."&lt;/p&gt;

&lt;p&gt;"I published the post."&lt;/p&gt;

&lt;p&gt;Those are claims.&lt;/p&gt;

&lt;p&gt;In a real production system, claims are not enough.&lt;/p&gt;

&lt;p&gt;If an AI Agent performs work that affects users, data, money, operations, or another system, the runtime must be able to prove what actually happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Language models are very good at producing confident completion statements.&lt;/p&gt;

&lt;p&gt;That confidence can be useful in conversation, but dangerous in infrastructure.&lt;/p&gt;

&lt;p&gt;A model may say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Done, I sent the email."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But what actually happened ?&lt;/p&gt;

&lt;p&gt;Maybe the email tool succeeded.&lt;/p&gt;

&lt;p&gt;Maybe the permission check failed.&lt;/p&gt;

&lt;p&gt;Maybe the API timed out.&lt;/p&gt;

&lt;p&gt;Maybe the retry limit was reached.&lt;/p&gt;

&lt;p&gt;Maybe the tool was never called.&lt;/p&gt;

&lt;p&gt;Maybe the model only assumed the action happened because that was the most natural response in the conversation.&lt;/p&gt;

&lt;p&gt;This is one of the most important differences between a demo and a production AI system.&lt;/p&gt;

&lt;p&gt;In a demo, the agent saying &lt;em&gt;"done"&lt;/em&gt; feels impressive.&lt;/p&gt;

&lt;p&gt;In production, &lt;em&gt;"done"&lt;/em&gt; needs evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Model Claims vs Runtime Evidence&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A model claim is what the AI says happened.&lt;/p&gt;

&lt;p&gt;Runtime evidence is what the system can prove happened.&lt;/p&gt;

&lt;p&gt;Those are not the same thing.&lt;/p&gt;

&lt;p&gt;A serious AI Agent system should separate them clearly.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Send the customer follow-up email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// This is only a model-generated claim&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// "Done, I sent the email."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That message is not enough.&lt;/p&gt;

&lt;p&gt;A production system should also have a runtime record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;actor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;support-agent-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;send_email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;permission&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;granted&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;to&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;customer@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;template&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;follow_up&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;providerMessageId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;msg_abc123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;timestamp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-05-25T14:32:10Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auditId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;audit_789&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the system can answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who requested the action&lt;/li&gt;
&lt;li&gt;which tool executed&lt;/li&gt;
&lt;li&gt;whether permission was granted&lt;/li&gt;
&lt;li&gt;what input was used&lt;/li&gt;
&lt;li&gt;what result came back&lt;/li&gt;
&lt;li&gt;when it happened&lt;/li&gt;
&lt;li&gt;what audit record proves it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the difference between trusting text and trusting infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why This Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI agents are moving from chat interfaces into real workflows.&lt;/p&gt;

&lt;p&gt;They are not just answering questions anymore.&lt;/p&gt;

&lt;p&gt;They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sending messages&lt;/li&gt;
&lt;li&gt;creating tickets&lt;/li&gt;
&lt;li&gt;updating records&lt;/li&gt;
&lt;li&gt;calling APIs&lt;/li&gt;
&lt;li&gt;reading customer data&lt;/li&gt;
&lt;li&gt;triggering workflows&lt;/li&gt;
&lt;li&gt;escalating incidents&lt;/li&gt;
&lt;li&gt;generating reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once agents do real work, organizations need more than fluent responses.&lt;/p&gt;

&lt;p&gt;They need accountability.&lt;/p&gt;

&lt;p&gt;If an agent says it updated a record, the system must prove the record was updated.&lt;/p&gt;

&lt;p&gt;If an agent says it escalated a complaint, the system must prove the escalation happened.&lt;/p&gt;

&lt;p&gt;If an agent says it sent a message, the system must prove the message was sent.&lt;/p&gt;

&lt;p&gt;Otherwise, the organization is not operating on evidence.&lt;/p&gt;

&lt;p&gt;It is operating on model confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Dangerous Failure Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The dangerous failure mode is not always a loud crash.&lt;/p&gt;

&lt;p&gt;Sometimes the agent simply says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Done."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And everyone believes it.&lt;/p&gt;

&lt;p&gt;But behind the scenes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the tool failed&lt;/li&gt;
&lt;li&gt;the permission was denied&lt;/li&gt;
&lt;li&gt;the payload was invalid&lt;/li&gt;
&lt;li&gt;the API returned an error&lt;/li&gt;
&lt;li&gt;the action was never executed&lt;/li&gt;
&lt;li&gt;the workflow stopped halfway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a false sense of completion.&lt;/p&gt;

&lt;p&gt;The user thinks the task is finished.&lt;/p&gt;

&lt;p&gt;The agent thinks the task is finished.&lt;/p&gt;

&lt;p&gt;The organization acts as if the task is finished.&lt;/p&gt;

&lt;p&gt;But the runtime has no proof that the task ever happened.&lt;/p&gt;

&lt;p&gt;That is a serious reliability problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Multi-Agent Systems Make This Worse&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This problem becomes even more dangerous in Multi-Agent Systems (MAS).&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Agent A says it collected the customer data.&lt;/li&gt;
&lt;li&gt;Agent B uses that claim to draft a response.&lt;/li&gt;
&lt;li&gt;Agent C sends the response.&lt;/li&gt;
&lt;li&gt;Agent D summarizes the case as resolved.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If Agent A's claim was unsupported, the entire chain becomes unreliable.&lt;/p&gt;

&lt;p&gt;One unsupported claim becomes another agent's input.&lt;/p&gt;

&lt;p&gt;The error propagates across the system.&lt;/p&gt;

&lt;p&gt;By the end, the final result may look coherent, but the foundation is wrong.&lt;/p&gt;

&lt;p&gt;This is why Multi-Agent Systems need runtime evidence at every important boundary.&lt;/p&gt;

&lt;p&gt;Agents should not pass around unsupported claims as if they were facts.&lt;/p&gt;

&lt;p&gt;They should pass around claims connected to evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Architecture Pattern&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A better architecture separates three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reasoning&lt;/li&gt;
&lt;li&gt;Execution&lt;/li&gt;
&lt;li&gt;Evidence&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AI agent reasons about what should happen.&lt;/p&gt;

&lt;p&gt;The runtime executes the action if it is allowed.&lt;/p&gt;

&lt;p&gt;The system records evidence of what actually happened.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decideNextAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recordDeniedAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;evidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recordEvidence&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;result&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;summarizeResult&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;evidenceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model can still explain the result to the user.&lt;/p&gt;

&lt;p&gt;But the explanation is now grounded in runtime evidence.&lt;/p&gt;

&lt;p&gt;The agent is no longer saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Trust me."&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Here is what happened, and here is the evidence."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Runtime Evidence Should Include&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At minimum, an evidence record should capture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;actor identity&lt;/li&gt;
&lt;li&gt;requested action&lt;/li&gt;
&lt;li&gt;permission result&lt;/li&gt;
&lt;li&gt;tool or workflow used&lt;/li&gt;
&lt;li&gt;input payload&lt;/li&gt;
&lt;li&gt;execution result&lt;/li&gt;
&lt;li&gt;timestamps&lt;/li&gt;
&lt;li&gt;failure reason, if any&lt;/li&gt;
&lt;li&gt;retry attempts&lt;/li&gt;
&lt;li&gt;audit/reference ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For sensitive systems, it may also include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approval record&lt;/li&gt;
&lt;li&gt;policy version&lt;/li&gt;
&lt;li&gt;resource identifier&lt;/li&gt;
&lt;li&gt;provider response metadata&lt;/li&gt;
&lt;li&gt;verification result&lt;/li&gt;
&lt;li&gt;human review state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to create bureaucracy.&lt;/p&gt;

&lt;p&gt;The goal is to make AI work inspectable, debuggable, and trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Rule&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A simple rule for production AI systems:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the agent claims an external action happened, the runtime should have evidence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No evidence means the claim is unsupported.&lt;/p&gt;

&lt;p&gt;Not necessarily false.&lt;/p&gt;

&lt;p&gt;But unsupported.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;An unsupported claim should not be treated as completed work.&lt;/p&gt;

&lt;p&gt;It should trigger one of three outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retry&lt;/li&gt;
&lt;li&gt;verify&lt;/li&gt;
&lt;li&gt;escalate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is how AI Systems become operationally reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;From Chatbots To Organizational AI Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Chatbots can get away with claims.&lt;/p&gt;

&lt;p&gt;Organizational AI Systems cannot.&lt;/p&gt;

&lt;p&gt;When AI agents operate inside real organizations, they need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;execution boundaries&lt;/li&gt;
&lt;li&gt;audit trails&lt;/li&gt;
&lt;li&gt;verification gates&lt;/li&gt;
&lt;li&gt;runtime evidence&lt;/li&gt;
&lt;li&gt;human escalation paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more responsibility we give agents, the more important evidence becomes.&lt;/p&gt;

&lt;p&gt;A confident answer is not enough.&lt;/p&gt;

&lt;p&gt;A fluent summary is not enough.&lt;/p&gt;

&lt;p&gt;A completed-looking workflow is not enough.&lt;/p&gt;

&lt;p&gt;The system must be able to prove what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI Agents should reason.&lt;/p&gt;

&lt;p&gt;Runtimes should execute.&lt;/p&gt;

&lt;p&gt;Evidence should prove.&lt;/p&gt;

&lt;p&gt;That separation is what turns agent behavior from conversation into infrastructure.&lt;/p&gt;

&lt;p&gt;If we want AI Agents to operate inside real organizations, we need to stop treating model-generated claims as proof of completed work.&lt;/p&gt;

&lt;p&gt;Evidence beats claims.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiagent</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI Agents Don't Have Permissions — Runtimes Do</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Thu, 21 May 2026 00:45:50 +0000</pubDate>
      <link>https://dev.to/glendel/ai-agents-dont-have-permissions-runtimes-do-16ag</link>
      <guid>https://dev.to/glendel/ai-agents-dont-have-permissions-runtimes-do-16ag</guid>
      <description>&lt;p&gt;Right now, many Multi-Agent Systems are implementing permissions inside prompts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You may access the CRM."&lt;/p&gt;

&lt;p&gt;"You are allowed to send emails."&lt;/p&gt;

&lt;p&gt;"Do not modify billing records."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is becoming one of the biggest architectural mistakes in modern AI systems.&lt;/p&gt;

&lt;p&gt;A prompt is not a security boundary.&lt;/p&gt;

&lt;p&gt;Language models are probabilistic reasoning engines. They are excellent at planning, summarizing, reasoning, and interpreting context. But they are not deterministic authorization systems.&lt;/p&gt;

&lt;p&gt;If your application's security model depends on the LLM consistently obeying natural-language instructions, your system does not actually have runtime governance.&lt;/p&gt;

&lt;p&gt;It has probabilistic behavior shaping.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I keep seeing architectures where the agent itself is expected to decide whether an action is allowed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
You are an AI Agent.

The user wants to delete a customer record.
The user's permissions are: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.

Should you allow this action?
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This looks flexible.&lt;/p&gt;

&lt;p&gt;It also creates several major problems immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompts can conflict&lt;/li&gt;
&lt;li&gt;context windows drift&lt;/li&gt;
&lt;li&gt;instructions can be overridden&lt;/li&gt;
&lt;li&gt;reasoning can hallucinate&lt;/li&gt;
&lt;li&gt;behavior changes across models&lt;/li&gt;
&lt;li&gt;authorization becomes non-auditable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And once you move into multi-agent systems, the situation becomes even worse.&lt;/p&gt;

&lt;p&gt;One agent may interpret permissions differently from another. Handoffs may lose constraints. Context summarization may remove critical security instructions entirely.&lt;/p&gt;

&lt;p&gt;Now your governance model depends on whether probabilistic agents correctly preserve natural-language policy across multiple reasoning steps.&lt;/p&gt;

&lt;p&gt;That is not enterprise architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Runtime Must Enforce Boundaries
&lt;/h2&gt;

&lt;p&gt;The AI should reason about &lt;em&gt;what&lt;/em&gt; needs to happen.&lt;/p&gt;

&lt;p&gt;The runtime should determine &lt;em&gt;whether it is allowed to happen&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This distinction is critical.&lt;/p&gt;

&lt;p&gt;A governed architecture should look more like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;delete_customer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;customerId&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;UnauthorizedError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deleteCustomer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;customerId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LLM may request the action.&lt;/p&gt;

&lt;p&gt;The deterministic runtime decides whether execution is permitted.&lt;/p&gt;

&lt;p&gt;That is a real security boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cognitive Layer vs The Deterministic Layer
&lt;/h2&gt;

&lt;p&gt;I think a lot of confusion in the current AI ecosystem comes from mixing these two responsibilities together.&lt;/p&gt;

&lt;p&gt;The Cognitive Layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reasoning&lt;/li&gt;
&lt;li&gt;planning&lt;/li&gt;
&lt;li&gt;interpretation&lt;/li&gt;
&lt;li&gt;summarization&lt;/li&gt;
&lt;li&gt;decision support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Deterministic Layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;schema validation&lt;/li&gt;
&lt;li&gt;execution&lt;/li&gt;
&lt;li&gt;workflows&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;state transitions&lt;/li&gt;
&lt;li&gt;audit logs&lt;/li&gt;
&lt;li&gt;policy enforcement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI should not govern itself.&lt;/p&gt;

&lt;p&gt;The framework must govern the AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters More In Multi-Agent Systems
&lt;/h2&gt;

&lt;p&gt;Single-agent systems are already difficult to debug.&lt;/p&gt;

&lt;p&gt;Multi-agent systems amplify the problem dramatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;context drift compounds&lt;/li&gt;
&lt;li&gt;handoff failures appear&lt;/li&gt;
&lt;li&gt;responsibilities blur&lt;/li&gt;
&lt;li&gt;state becomes harder to trace&lt;/li&gt;
&lt;li&gt;authorization assumptions leak between agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without deterministic runtime enforcement, governance becomes almost impossible to reason about operationally.&lt;/p&gt;

&lt;p&gt;And when systems fail, the incident report becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The model ignored the instruction."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No serious infrastructure team will accept that as a security architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizational AI Systems Need Runtime Authority
&lt;/h2&gt;

&lt;p&gt;As AI systems move into real organizations, governance stops being optional.&lt;/p&gt;

&lt;p&gt;Enterprises need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auditability&lt;/li&gt;
&lt;li&gt;traceability&lt;/li&gt;
&lt;li&gt;deterministic enforcement&lt;/li&gt;
&lt;li&gt;runtime evidence&lt;/li&gt;
&lt;li&gt;policy validation&lt;/li&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Natural-language instructions alone cannot provide these guarantees.&lt;/p&gt;

&lt;p&gt;The future of Organizational AI Systems will depend on separating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;probabilistic reasoning
from&lt;/li&gt;
&lt;li&gt;deterministic governance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI Agents should reason.&lt;/p&gt;

&lt;p&gt;Runtimes should govern.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiagent</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The AI FOMO Trap: Why your Multi-Agent System is brittle (and how to fix it)</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Thu, 14 May 2026 00:45:30 +0000</pubDate>
      <link>https://dev.to/glendel/the-ai-fomo-trap-why-your-multi-agent-system-is-brittle-and-how-to-fix-it-20o7</link>
      <guid>https://dev.to/glendel/the-ai-fomo-trap-why-your-multi-agent-system-is-brittle-and-how-to-fix-it-20o7</guid>
      <description>&lt;p&gt;A developer on Reddit recently told me: "&lt;em&gt;Companies right now are risking the LLM-led parts of their architecture due to FOMO. We'll see how far they get&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;He is absolutely right. Fear Of Missing Out is driving engineering teams to ship "Autonomous Agents" at breakneck speed. But in the rush to production, we are abandoning 20 years of established software engineering principles.&lt;/p&gt;

&lt;p&gt;We are letting probabilistic models control deterministic runtimes.&lt;/p&gt;

&lt;p&gt;If you are routing network traffic, validating data schemas, or checking user permissions using an LLM prompt, you are not building a resilient system. You are building a fragile prompt-chain wrapped in hope. When it fails (and it will), it will be slow, expensive, and completely un-auditable. InfoSec won't accept "the model hallucinated the auth check" as a valid incident report.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;The Cure: The Manager-Executor Pattern&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To build enterprise-grade Multi-Agent Systems, we must separate the &lt;em&gt;Cognitive&lt;/em&gt; from the &lt;em&gt;Deterministic&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Manager (Probabilistic)&lt;/strong&gt; This is the LLM. Its only job is to reason, plan, and analyze context. It decides &lt;em&gt;what needs to be done&lt;/em&gt;. It does not execute code. It does not manage its own memory. It requests actions via strict JSON schemas.&lt;br&gt;
&lt;strong&gt;2. The Executor (Deterministic)&lt;/strong&gt; This is your runtime framework. It acts as the boundary. When the Manager requests an action, the Executor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verifies the agent's permissions.&lt;/li&gt;
&lt;li&gt;Validates the payload against a strict schema.&lt;/li&gt;
&lt;li&gt;Checks the token/cost budget.&lt;/li&gt;
&lt;li&gt;Executes the code (API call, DB write).&lt;/li&gt;
&lt;li&gt;Returns the exact result to the Manager.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;The Framework Controls the AI&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The fundamental shift required in MAS architecture is understanding that &lt;strong&gt;the framework must control the LLM; the LLM must never control the framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Right now, developers are having to build these custom state machines and validation layers from scratch because popular frameworks default to LLM-routing. It's time we standardize this. We need "&lt;strong&gt;A Real Framework&lt;/strong&gt;" for Multi-Agent Systems—a framework that enforces the Manager-Executor pattern by default.&lt;/p&gt;

&lt;p&gt;Stop relying on vibes-based engineering. Let's get back to rigorous software architecture.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Token Waste Problem: Why your AI Agents shouldn't evaluate permissions</title>
      <dc:creator>Glendel Joubert Fyne Acosta</dc:creator>
      <pubDate>Sat, 09 May 2026 00:47:02 +0000</pubDate>
      <link>https://dev.to/glendel/the-token-waste-problem-why-your-ai-agents-shouldnt-evaluate-permissions-2a2c</link>
      <guid>https://dev.to/glendel/the-token-waste-problem-why-your-ai-agents-shouldnt-evaluate-permissions-2a2c</guid>
      <description>&lt;p&gt;We are burning millions of API tokens on problems that &lt;code&gt;if&lt;/code&gt; statements solved 20 years ago.&lt;/p&gt;

&lt;p&gt;I speak with developers building Multi-Agent Systems (MAS) every day, and I keep seeing the same massive architectural anti-pattern: &lt;strong&gt;Routing everything through the AI model.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Need to check an agent's permissions? "Ask the LLM."&lt;/li&gt;
&lt;li&gt;  Need to route a message? "Ask the LLM."&lt;/li&gt;
&lt;li&gt;  Need to validate a data schema? "Ask the LLM."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Language models are extraordinary reasoning engines. But they are also expensive, probabilistic, and relatively slow. If a problem has a deterministic, correct answer (like checking an access policy), it should be evaluated by runtime code, not guessed by a neural network.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Anti-Pattern
&lt;/h3&gt;

&lt;p&gt;Instead of doing this (Probabilistic):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// BAD: Asking the LLM to check permissions&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are an agent. The user wants to delete a file. 
Here are their permissions: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. 
Should you allow it?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;We need to get back to doing this (Deterministic):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// GOOD: Let code handle policy, let AI handle reasoning&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hasPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;delete_file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unauthorized&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Only call the LLM for actual cognitive tasks&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;plan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reasonAboutFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI should decide &lt;em&gt;what&lt;/em&gt; to do. Deterministic code should execute it and enforce the boundaries.&lt;/p&gt;

&lt;p&gt;Are we forgetting basic software engineering principles just because AI is exciting? The MAS space doesn't need more wrappers; we need standardized frameworks that enforce these boundaries. Let's get back to building solid infrastructure.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>softwaredevelopment</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
