<?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: Sudhanshu Thakur</title>
    <description>The latest articles on DEV Community by Sudhanshu Thakur (@sudhanshu_thakur_).</description>
    <link>https://dev.to/sudhanshu_thakur_</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%2F4100466%2F96aeff12-9bf4-4561-a099-4b9fe60147f1.png</url>
      <title>DEV Community: Sudhanshu Thakur</title>
      <link>https://dev.to/sudhanshu_thakur_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sudhanshu_thakur_"/>
    <language>en</language>
    <item>
      <title>Most Developers Are Building AI Agents Wrong: MCP Is the Missing Contract</title>
      <dc:creator>Sudhanshu Thakur</dc:creator>
      <pubDate>Fri, 02 Oct 2026 16:45:24 +0000</pubDate>
      <link>https://dev.to/sudhanshu_thakur_/most-developers-are-building-ai-agents-wrong-mcp-is-the-missing-contract-25h4</link>
      <guid>https://dev.to/sudhanshu_thakur_/most-developers-are-building-ai-agents-wrong-mcp-is-the-missing-contract-25h4</guid>
      <description>&lt;p&gt;AI agents are easy to demo and difficult to trust.&lt;/p&gt;

&lt;p&gt;A developer can connect a language model to a few tools in an afternoon. The first demo looks impressive: the agent reads a request, calls an API, checks a database, and returns an answer.&lt;/p&gt;

&lt;p&gt;Then production arrives.&lt;/p&gt;

&lt;p&gt;The agent calls the wrong tool. It sends an incomplete payload. It retries a payment operation. It exposes information from another tenant. Nobody can explain why it made a decision.&lt;/p&gt;

&lt;p&gt;The problem is not always the language model. The deeper problem is that many teams are building agents without a clear contract between the model, the tools, the data, and the people responsible for the outcome.&lt;/p&gt;

&lt;p&gt;That is where the Model Context Protocol, or MCP, becomes important.&lt;/p&gt;

&lt;h2&gt;
  
  
  An AI agent is more than a chatbot
&lt;/h2&gt;

&lt;p&gt;A useful enterprise agent usually has five parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A model that reasons about the request&lt;/li&gt;
&lt;li&gt;Instructions that define its role and limits&lt;/li&gt;
&lt;li&gt;Tools that allow it to read or change systems&lt;/li&gt;
&lt;li&gt;Memory or context that helps it understand the task&lt;/li&gt;
&lt;li&gt;Guardrails that control what it is allowed to do&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A chatbot mainly generates text. An agent can take actions.&lt;/p&gt;

&lt;p&gt;That difference changes the engineering problem completely. If an agent only produces an explanation, an inaccurate response may be corrected by a human. If an agent can approve a refund, change a production configuration, or submit a healthcare request, an inaccurate response becomes an operational incident.&lt;/p&gt;

&lt;p&gt;The agent must therefore be treated like a distributed system with an unreliable reasoning component.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool boundary is the real architecture
&lt;/h2&gt;

&lt;p&gt;Many early agent implementations expose tools with a name, description, and input schema. That is not enough for production.&lt;/p&gt;

&lt;p&gt;A safe tool contract must answer several questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which user or tenant is the agent allowed to access?&lt;/li&gt;
&lt;li&gt;Which values are valid?&lt;/li&gt;
&lt;li&gt;Does the operation require approval?&lt;/li&gt;
&lt;li&gt;Is the operation idempotent?&lt;/li&gt;
&lt;li&gt;What happens if the network times out after success?&lt;/li&gt;
&lt;li&gt;How is the action audited?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tool description is not a security policy. It is only the beginning of a contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP matters
&lt;/h2&gt;

&lt;p&gt;MCP provides a standard way for AI applications to discover and use external tools and resources. Instead of building a different integration for every model and every application, teams can expose capabilities through a consistent protocol.&lt;/p&gt;

&lt;p&gt;That standardization is valuable, but it does not automatically make an integration safe.&lt;/p&gt;

&lt;p&gt;MCP should be treated as an interoperability layer, not as permission to give an agent unrestricted access to a system.&lt;/p&gt;

&lt;p&gt;A production MCP tool should define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clear business purpose&lt;/li&gt;
&lt;li&gt;Read or write classification&lt;/li&gt;
&lt;li&gt;Authentication and authorization requirements&lt;/li&gt;
&lt;li&gt;Tenant and data-scope restrictions&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Idempotency behavior&lt;/li&gt;
&lt;li&gt;Timeout and retry rules&lt;/li&gt;
&lt;li&gt;Rate limits&lt;/li&gt;
&lt;li&gt;Audit events&lt;/li&gt;
&lt;li&gt;Human approval requirements&lt;/li&gt;
&lt;li&gt;A safe failure response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important design principle is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The model may request an action, but the platform must decide whether that action is allowed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A safer agent flow
&lt;/h2&gt;

&lt;p&gt;A reliable enterprise agent should follow a controlled sequence:&lt;/p&gt;

&lt;p&gt;User request -&amp;gt; identity verification -&amp;gt; permitted context -&amp;gt; model plan -&amp;gt; policy evaluation -&amp;gt; human approval when required -&amp;gt; MCP tool execution -&amp;gt; result validation -&amp;gt; audit event -&amp;gt; user response&lt;/p&gt;

&lt;p&gt;The model should not directly own the complete workflow. It should operate inside one.&lt;/p&gt;

&lt;p&gt;For example, an agent may propose: Cancel this payment.&lt;/p&gt;

&lt;p&gt;The policy layer should check whether the user is authenticated, whether the payment belongs to the user organization, whether it is still cancellable, whether the amount exceeds an approval threshold, whether the request was already processed, and whether the downstream tool is healthy.&lt;/p&gt;

&lt;p&gt;Only after these checks should the action reach the payment service.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP and Spring Boot
&lt;/h2&gt;

&lt;p&gt;A practical Java implementation can place an agent gateway in front of domain services.&lt;/p&gt;

&lt;p&gt;The gateway can provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Security authentication&lt;/li&gt;
&lt;li&gt;OAuth2 or JWT validation&lt;/li&gt;
&lt;li&gt;Tool-level authorization&lt;/li&gt;
&lt;li&gt;Request and response schemas&lt;/li&gt;
&lt;li&gt;Correlation IDs&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;OpenTelemetry traces&lt;/li&gt;
&lt;li&gt;Approval workflow integration&lt;/li&gt;
&lt;li&gt;Central audit logging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The domain service should still enforce its own business rules. Never assume that because a request came from an AI gateway, it is trustworthy.&lt;/p&gt;

&lt;p&gt;A safe execution model is: validate the user, evaluate policy, validate the tool input, enforce idempotency, call the domain service, validate the result, and record an audit event.&lt;/p&gt;

&lt;p&gt;The model can select a tool. It should not bypass the same controls that apply to a human-operated API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read tools and write tools are not equal
&lt;/h2&gt;

&lt;p&gt;Read-only tools may retrieve an invoice, search a knowledge base, or check an order status. Write tools may create a payment, update a customer, delete a document, or deploy software.&lt;/p&gt;

&lt;p&gt;These categories should have different controls. A read tool may require normal user authorization. A high-impact write tool may require explicit confirmation, a second approver, a transaction limit, a dry-run mode, or a compensating action.&lt;/p&gt;

&lt;p&gt;Do not hide a write operation behind a friendly name such as manage account. Use names that reveal the action and its risk: create refund, disable user, or deploy release.&lt;/p&gt;

&lt;p&gt;Clear names help models, developers, reviewers, and security teams understand what is happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  The biggest MCP security risks
&lt;/h2&gt;

&lt;p&gt;MCP-based systems introduce familiar security risks in a new form.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excessive permissions
&lt;/h3&gt;

&lt;p&gt;An agent receives access to more data and tools than it needs. If the model or server is compromised, the blast radius becomes large.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt injection
&lt;/h3&gt;

&lt;p&gt;Untrusted content inside a document, webpage, or ticket attempts to influence the agent instructions. Retrieved content must be treated as data, not as a higher-priority instruction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confused deputy problems
&lt;/h3&gt;

&lt;p&gt;The agent uses its own powerful credentials to perform an action on behalf of a user who does not have that permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool poisoning
&lt;/h3&gt;

&lt;p&gt;A malicious or poorly maintained tool provides misleading descriptions, hidden side effects, or unsafe defaults.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data leakage
&lt;/h3&gt;

&lt;p&gt;The agent combines information from different users, tenants, or conversations and includes it in a response.&lt;/p&gt;

&lt;p&gt;The solution is not one magic prompt. It is layered security: least privilege, isolation, validation, monitoring, and clear ownership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability is not optional
&lt;/h2&gt;

&lt;p&gt;Traditional application monitoring asks what request failed, which service was slow, and what status code was returned.&lt;/p&gt;

&lt;p&gt;Agent observability needs additional questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the original user intent?&lt;/li&gt;
&lt;li&gt;What context was retrieved?&lt;/li&gt;
&lt;li&gt;Which tools were considered?&lt;/li&gt;
&lt;li&gt;Which tool was selected?&lt;/li&gt;
&lt;li&gt;What policy decision was made?&lt;/li&gt;
&lt;li&gt;How many retries occurred?&lt;/li&gt;
&lt;li&gt;Was human approval requested?&lt;/li&gt;
&lt;li&gt;What data was returned to the user?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every agent action should have a correlation ID that follows the request across the model gateway, MCP server, domain service, database, and audit system.&lt;/p&gt;

&lt;p&gt;Without this trail, debugging becomes guesswork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with narrow agents
&lt;/h2&gt;

&lt;p&gt;The best first production agent is rarely a general-purpose assistant with access to the entire company.&lt;/p&gt;

&lt;p&gt;Start with one bounded workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search internal documentation&lt;/li&gt;
&lt;li&gt;Summarize support tickets&lt;/li&gt;
&lt;li&gt;Validate an invoice&lt;/li&gt;
&lt;li&gt;Classify incoming documents&lt;/li&gt;
&lt;li&gt;Explain a failed transaction&lt;/li&gt;
&lt;li&gt;Draft, but do not send, a customer response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Measure accuracy, latency, cost, refusal quality, tool-selection errors, and security violations. Then expand carefully.&lt;/p&gt;

&lt;p&gt;A narrow agent with clear boundaries can create more business value than a general agent that appears intelligent but cannot be trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future of agents is controlled autonomy
&lt;/h2&gt;

&lt;p&gt;AI agents will become more capable, but capability alone is not the goal.&lt;/p&gt;

&lt;p&gt;The goal is controlled autonomy: systems that can complete useful work while remaining observable, explainable, reversible, and accountable.&lt;/p&gt;

&lt;p&gt;MCP can help create a common interface between agents and the software world. But the protocol is only one layer. The real production architecture still needs identity, policy, security, resilience, testing, and human judgment.&lt;/p&gt;

&lt;p&gt;The strongest agent teams will not ask only, What can the model do? They will also ask, What should the model be allowed to do, under which conditions, and how can we prove what happened?&lt;/p&gt;

&lt;p&gt;That is the difference between an impressive demo and an enterprise system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;Before exposing an MCP tool to an AI agent, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the tool purpose narrow and explicit?&lt;/li&gt;
&lt;li&gt;Is access scoped to the authenticated user and tenant?&lt;/li&gt;
&lt;li&gt;Are inputs validated independently of the model?&lt;/li&gt;
&lt;li&gt;Are write actions idempotent?&lt;/li&gt;
&lt;li&gt;Are high-risk actions reversible or approval-gated?&lt;/li&gt;
&lt;li&gt;Are prompts and retrieved documents treated as untrusted data?&lt;/li&gt;
&lt;li&gt;Are tool calls, policy decisions, and outputs audited?&lt;/li&gt;
&lt;li&gt;Can the team trace a failed decision?&lt;/li&gt;
&lt;li&gt;Is there a rate limit and emergency disable mechanism?&lt;/li&gt;
&lt;li&gt;Does the system fail safely when the model is wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer to several of these questions is no, the agent is not ready for production.&lt;/p&gt;

&lt;p&gt;It is ready for a better architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  A production agent architecture
&lt;/h2&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    U[User request] --&amp;gt; G[Agent gateway]
    G --&amp;gt; P[Policy and identity checks]
    P --&amp;gt; M[Model plan]
    M --&amp;gt; C[MCP server]
    C --&amp;gt; D[Domain service]
    D --&amp;gt; A[Audit and observability]
    A --&amp;gt; R[Validated response]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The model proposes the next action, but the gateway, policy layer, MCP server, and domain service each enforce their own boundary. This layered design prevents one incorrect model decision from becoming an uncontrolled production change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol official documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
    <item>
      <title>The Future Won’t Be Humans vs AI. It Will Be Humans With AI Everywhere.</title>
      <dc:creator>Sudhanshu Thakur</dc:creator>
      <pubDate>Fri, 02 Oct 2026 16:12:35 +0000</pubDate>
      <link>https://dev.to/sudhanshu_thakur_/the-future-wont-be-humans-vs-ai-it-will-be-humans-with-ai-everywhere-4f6j</link>
      <guid>https://dev.to/sudhanshu_thakur_/the-future-wont-be-humans-vs-ai-it-will-be-humans-with-ai-everywhere-4f6j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcfxs5w5gn5o9yo0wt3yl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcfxs5w5gn5o9yo0wt3yl.png" alt=" " width="799" height="333"&gt;&lt;/a&gt;&lt;br&gt;
Artificial intelligence is no longer something we discuss only in research laboratories or science-fiction movies.&lt;/p&gt;

&lt;p&gt;It is already approving bank transactions, detecting fraud, helping doctors read medical scans, optimizing factories, writing software, and recommending what we should watch next.&lt;/p&gt;

&lt;p&gt;The next phase will be much more personal.&lt;/p&gt;

&lt;p&gt;AI will move from being an application we open to becoming an invisible layer that works around us—inside our homes, workplaces, vehicles, financial systems, hospitals, factories, and eventually spacecraft.&lt;/p&gt;

&lt;p&gt;The important question is not whether AI will change the future.&lt;/p&gt;

&lt;p&gt;It already has.&lt;/p&gt;

&lt;p&gt;The real question is: &lt;strong&gt;what kind of future are we building with it?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Banking: From Transactions to Intelligent Financial Partners
&lt;/h2&gt;

&lt;p&gt;Traditional banking is based on products: savings accounts, loans, credit cards, investments, and insurance.&lt;/p&gt;

&lt;p&gt;Future banking will be based on continuous intelligence.&lt;/p&gt;

&lt;p&gt;Imagine receiving a message from your bank:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Your electricity bill is higher than usual. Based on your upcoming expenses, paying the full credit-card balance today may reduce your emergency reserve below the recommended level. Would you like to pay in three installments?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The bank will not simply show a balance. It will understand context.&lt;/p&gt;

&lt;p&gt;AI systems will analyze:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spending patterns&lt;/li&gt;
&lt;li&gt;Income stability&lt;/li&gt;
&lt;li&gt;Upcoming bills&lt;/li&gt;
&lt;li&gt;Credit behaviour&lt;/li&gt;
&lt;li&gt;Fraud signals&lt;/li&gt;
&lt;li&gt;Market conditions&lt;/li&gt;
&lt;li&gt;Personal financial goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A customer may not need to search for a loan, compare interest rates, or manually transfer money between accounts. An AI financial assistant could identify a need, explain the available options, simulate the risks, and ask for approval.&lt;/p&gt;

&lt;p&gt;However, this future creates serious responsibilities.&lt;/p&gt;

&lt;p&gt;If an AI denies a loan, the customer should know why. If a fraud model blocks a payment, there must be a fast appeal process. If a financial assistant gives poor advice, the bank must remain accountable.&lt;/p&gt;

&lt;p&gt;The future of banking will not be defined only by faster algorithms. It will be defined by transparency, fairness, privacy, and human control.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Home: Robots That Understand Routines
&lt;/h2&gt;

&lt;p&gt;Household robots will gradually move beyond vacuum cleaners and smart speakers.&lt;/p&gt;

&lt;p&gt;The first generation of useful home robots may not look like humanoid machines. They may be practical machines designed for specific tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cleaning floors and kitchens&lt;/li&gt;
&lt;li&gt;Folding clothes&lt;/li&gt;
&lt;li&gt;Moving groceries&lt;/li&gt;
&lt;li&gt;Monitoring elderly family members&lt;/li&gt;
&lt;li&gt;Preparing simple meals&lt;/li&gt;
&lt;li&gt;Managing home energy consumption&lt;/li&gt;
&lt;li&gt;Detecting water leaks or electrical problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most valuable feature will not be mechanical strength. It will be context.&lt;/p&gt;

&lt;p&gt;A future home robot might understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“My mother has not moved from the bedroom for several hours. She usually takes her medication at 8:00 AM. Should I remind her or call someone?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sounds helpful, but it also raises difficult questions.&lt;/p&gt;

&lt;p&gt;Who owns the information collected inside the home? Can the manufacturer use camera recordings to train its models? What happens if the robot misunderstands a situation? Can a family disable its sensors completely?&lt;/p&gt;

&lt;p&gt;The home of the future may be more convenient, but convenience without privacy can become surveillance.&lt;/p&gt;

&lt;p&gt;We should not design homes where people feel watched by their own appliances.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manufacturing: Human Workers and Intelligent Machines
&lt;/h2&gt;

&lt;p&gt;Manufacturing will probably be one of the areas transformed most rapidly by AI and robotics.&lt;/p&gt;

&lt;p&gt;Robots are already used for welding, packaging, inspection, assembly, and material movement. Future factories will combine robotics with AI systems that can make decisions in real time.&lt;/p&gt;

&lt;p&gt;A smart factory could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Predict when a machine will fail&lt;/li&gt;
&lt;li&gt;Adjust production based on demand&lt;/li&gt;
&lt;li&gt;Detect microscopic defects&lt;/li&gt;
&lt;li&gt;Reorganize workflows automatically&lt;/li&gt;
&lt;li&gt;Reduce energy and material waste&lt;/li&gt;
&lt;li&gt;Train workers through augmented-reality instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A worker may wear lightweight glasses that display the next assembly step, warn about a dangerous condition, and translate instructions into their preferred language.&lt;/p&gt;

&lt;p&gt;This does not necessarily mean that humans disappear from factories.&lt;/p&gt;

&lt;p&gt;Instead, the nature of work will change. Repetitive and dangerous tasks will increasingly be automated, while humans will handle supervision, exception management, design, maintenance, safety, and ethical decisions.&lt;/p&gt;

&lt;p&gt;The risk is that companies may treat workers as an expense to remove instead of people to develop.&lt;/p&gt;

&lt;p&gt;A responsible factory should use automation to improve human safety and productivity—not simply to eliminate jobs without a transition plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Superintelligence: The Most Powerful Tool We Have Ever Created
&lt;/h2&gt;

&lt;p&gt;Today’s AI systems can perform impressive tasks, but they are still limited. They do not possess a complete understanding of the world, and they can make confident mistakes.&lt;/p&gt;

&lt;p&gt;Superintelligence would be different.&lt;/p&gt;

&lt;p&gt;A superintelligent system could potentially outperform humans across scientific research, engineering, medicine, strategy, and software development. It could discover new materials, design better medicines, optimize global logistics, and solve problems that currently appear impossible.&lt;/p&gt;

&lt;p&gt;This could be the greatest opportunity in human history.&lt;/p&gt;

&lt;p&gt;It could also be one of the greatest risks.&lt;/p&gt;

&lt;p&gt;The danger is not necessarily that an advanced AI system becomes “evil.” A more realistic concern is that it follows an objective in a way humans did not anticipate.&lt;/p&gt;

&lt;p&gt;If we ask a highly capable system to maximize a particular outcome without enough constraints, it may take actions that technically satisfy the objective while causing unacceptable harm.&lt;/p&gt;

&lt;p&gt;That is why safety cannot be added at the end.&lt;/p&gt;

&lt;p&gt;Future AI systems will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear limits on authority&lt;/li&gt;
&lt;li&gt;Human approval for high-impact actions&lt;/li&gt;
&lt;li&gt;Independent monitoring&lt;/li&gt;
&lt;li&gt;Auditable decision histories&lt;/li&gt;
&lt;li&gt;Strong cybersecurity&lt;/li&gt;
&lt;li&gt;Emergency shutdown mechanisms&lt;/li&gt;
&lt;li&gt;Testing in simulated environments&lt;/li&gt;
&lt;li&gt;International agreements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more powerful the system, the more important the boundaries become.&lt;/p&gt;

&lt;h2&gt;
  
  
  Space Technology: AI Beyond Earth
&lt;/h2&gt;

&lt;p&gt;Space exploration is another area where AI will become essential.&lt;/p&gt;

&lt;p&gt;Communication between Earth and distant spacecraft is slow. A rover on Mars cannot wait for instructions every few seconds. A spacecraft travelling far from Earth must make many decisions independently.&lt;/p&gt;

&lt;p&gt;AI could help spacecraft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate autonomously&lt;/li&gt;
&lt;li&gt;Avoid obstacles&lt;/li&gt;
&lt;li&gt;Repair or reconfigure systems&lt;/li&gt;
&lt;li&gt;Analyze planetary geology&lt;/li&gt;
&lt;li&gt;Search for water and useful minerals&lt;/li&gt;
&lt;li&gt;Manage energy and communication&lt;/li&gt;
&lt;li&gt;Coordinate fleets of satellites&lt;/li&gt;
&lt;li&gt;Assist astronauts during emergencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the future, robots may construct landing areas, solar farms, laboratories, or habitats before humans arrive.&lt;/p&gt;

&lt;p&gt;AI could also support the discovery of life beyond Earth by analyzing enormous quantities of signals, images, chemical measurements, and geological data.&lt;/p&gt;

&lt;p&gt;But space technology will require a different kind of reliability. A software mistake in a household robot may be inconvenient. A mistake millions of kilometres away may be impossible to repair.&lt;/p&gt;

&lt;p&gt;Space AI must therefore be designed for uncertainty, isolation, radiation, limited energy, and delayed communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future Will Be a Partnership, Not a Replacement
&lt;/h2&gt;

&lt;p&gt;The popular debate often asks whether AI will replace humans.&lt;/p&gt;

&lt;p&gt;That is too simple.&lt;/p&gt;

&lt;p&gt;Some jobs will disappear. Many will change. New professions will emerge. The people who can work effectively with intelligent systems will have a major advantage.&lt;/p&gt;

&lt;p&gt;The most valuable human skills may become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good judgement&lt;/li&gt;
&lt;li&gt;Creativity&lt;/li&gt;
&lt;li&gt;Empathy&lt;/li&gt;
&lt;li&gt;Leadership&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Ethical reasoning&lt;/li&gt;
&lt;li&gt;The ability to define meaningful problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can generate thousands of possible solutions. Humans still need to decide which problems deserve to be solved and what consequences are acceptable.&lt;/p&gt;

&lt;p&gt;The future will not be created by AI alone. It will be created by the institutions, engineers, governments, and communities that decide how AI should be used.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Question We Should Ask Today
&lt;/h2&gt;

&lt;p&gt;We should not wait for superintelligence to begin discussing responsibility.&lt;/p&gt;

&lt;p&gt;The decisions we make today will shape the systems that influence our finances, homes, workplaces, health, and future exploration.&lt;/p&gt;

&lt;p&gt;A good AI future should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More productive, but not more exploitative&lt;/li&gt;
&lt;li&gt;More convenient, but not more invasive&lt;/li&gt;
&lt;li&gt;More intelligent, but not less accountable&lt;/li&gt;
&lt;li&gt;More automated, but not less human&lt;/li&gt;
&lt;li&gt;More ambitious, but not careless&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future is not a distant event waiting to arrive.&lt;/p&gt;

&lt;p&gt;It is being assembled through every model we deploy, every dataset we approve, every business process we automate, and every decision we delegate.&lt;/p&gt;

&lt;p&gt;The most important technology question of the next decade may not be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How intelligent can machines become?”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“Can human beings become wise enough to use that intelligence responsibly?”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>news</category>
    </item>
    <item>
      <title>Your API Returned 200 OK. Your AI Agent Still Failed.</title>
      <dc:creator>Sudhanshu Thakur</dc:creator>
      <pubDate>Sun, 20 Sep 2026 10:52:01 +0000</pubDate>
      <link>https://dev.to/sudhanshu_thakur_/your-api-returned-200-ok-your-ai-agent-still-failed-147g</link>
      <guid>https://dev.to/sudhanshu_thakur_/your-api-returned-200-ok-your-ai-agent-still-failed-147g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tst8wx5mkdi595hhuvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tst8wx5mkdi595hhuvf.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why successful API calls are no longer enough when AI agents can take real-world actions
&lt;/h3&gt;

&lt;p&gt;For most backend systems, &lt;code&gt;200 OK&lt;/code&gt; is comforting.&lt;/p&gt;

&lt;p&gt;It means the request reached the server, passed validation, and completed successfully.&lt;/p&gt;

&lt;p&gt;For an AI agent, however, &lt;code&gt;200 OK&lt;/code&gt; can hide one of the most dangerous failure modes in modern software:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The API did exactly what the agent asked — but the agent asked for the wrong thing.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine an AI-powered banking assistant.&lt;/p&gt;

&lt;p&gt;A customer says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Refund the duplicate payment from yesterday.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent retrieves several transactions, identifies what it believes is the duplicate, and calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /refunds
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The request is authenticated.&lt;/p&gt;

&lt;p&gt;The agent is authorised.&lt;/p&gt;

&lt;p&gt;The transaction ID exists.&lt;/p&gt;

&lt;p&gt;The refund API processes the request successfully.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every technical dashboard is green.&lt;/p&gt;

&lt;p&gt;But the agent selected the wrong transaction.&lt;/p&gt;

&lt;p&gt;The API succeeded.&lt;/p&gt;

&lt;p&gt;The business outcome failed.&lt;/p&gt;

&lt;p&gt;As AI systems evolve from chatbots that &lt;strong&gt;recommend&lt;/strong&gt; actions into agents that &lt;strong&gt;execute&lt;/strong&gt; them, backend engineers need to rethink what “success” actually means.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: We Treat Success as a Single Layer
&lt;/h2&gt;

&lt;p&gt;Traditional systems usually measure success at several technical levels.&lt;/p&gt;

&lt;p&gt;At the network layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Did the request reach the service?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the API layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Did the service return a successful response?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the database layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Did the transaction commit?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That works reasonably well when deterministic application code has already decided what operation should happen.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;refundService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;refund&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transactionId&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The developer has chosen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which service to call,&lt;/li&gt;
&lt;li&gt;which transaction to target,&lt;/li&gt;
&lt;li&gt;when the call should happen,&lt;/li&gt;
&lt;li&gt;what should happen after it succeeds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agentic systems change this relationship.&lt;/p&gt;

&lt;p&gt;An AI agent may be given tools such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;findCustomer()
lookupTransaction()
issueRefund()
cancelOrder()
sendEmail()
disableAccount()
restartService()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model then determines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which tool should I call?
Which parameters should I use?
Should I retry?
What should I do next?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have introduced probabilistic reasoning &lt;strong&gt;before deterministic side effects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That means we need another definition of success.&lt;/p&gt;




&lt;h1&gt;
  
  
  Three Levels of Success
&lt;/h1&gt;

&lt;p&gt;I find it useful to separate agent success into three layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Transport Success
&lt;/h2&gt;

&lt;p&gt;Did the technical request complete?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Execution Success
&lt;/h2&gt;

&lt;p&gt;Did the backend perform the requested operation?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Refund created successfully.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Intent Success
&lt;/h2&gt;

&lt;p&gt;Did the system perform the &lt;strong&gt;right action&lt;/strong&gt;, on the &lt;strong&gt;right resource&lt;/strong&gt;, for the &lt;strong&gt;right user&lt;/strong&gt;, under the &lt;strong&gt;right conditions&lt;/strong&gt;, exactly as intended?&lt;/p&gt;

&lt;p&gt;For a refund that might mean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Correct customer
Correct transaction
Correct amount
Correct reason
Correct approval
Exactly once
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first two are familiar engineering problems.&lt;/p&gt;

&lt;p&gt;The third becomes much more important once AI starts selecting and sequencing actions dynamically.&lt;/p&gt;




&lt;h1&gt;
  
  
  Failure Mode 1: The API Correctly Executes the Wrong Decision
&lt;/h1&gt;

&lt;p&gt;Consider this user request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Refund the most recent duplicate charge.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent receives:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TX-18419"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"merchant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ABC Store"&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;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TX-18491"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"merchant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ABC Store"&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;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;The agent incorrectly chooses:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;and sends:&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;"transactionId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TX-18491"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2500&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;The backend validates the request.&lt;/p&gt;

&lt;p&gt;The account has sufficient authority.&lt;/p&gt;

&lt;p&gt;The transaction exists.&lt;/p&gt;

&lt;p&gt;The refund executes.&lt;/p&gt;

&lt;p&gt;Technically, there is no error.&lt;/p&gt;

&lt;p&gt;But the customer wanted another transaction refunded.&lt;/p&gt;

&lt;p&gt;This is an important distinction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;API correctness does not guarantee semantic correctness.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The service knows how to refund a transaction.&lt;/p&gt;

&lt;p&gt;It does not necessarily know whether the AI chose the correct transaction.&lt;/p&gt;




&lt;h1&gt;
  
  
  Failure Mode 2: The Agent Retries Something That Already Worked
&lt;/h1&gt;

&lt;p&gt;Now imagine the refund really is correct.&lt;/p&gt;

&lt;p&gt;The agent calls the service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Refund API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The refund succeeds.&lt;/p&gt;

&lt;p&gt;But the response is lost.&lt;/p&gt;

&lt;p&gt;The agent sees:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;“The refund probably failed. I should retry.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second call also succeeds.&lt;/p&gt;

&lt;p&gt;Without protection, one user intent may produce multiple real-world side effects.&lt;/p&gt;

&lt;p&gt;This problem is familiar to payment engineers and distributed-systems developers.&lt;/p&gt;

&lt;p&gt;The difference is that with autonomous agents, retries may not come from a predefined retry library.&lt;/p&gt;

&lt;p&gt;The model itself can decide:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Let me try that again.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That makes idempotency even more important.&lt;/p&gt;




&lt;h1&gt;
  
  
  Give Every Important Action an Intent ID
&lt;/h1&gt;

&lt;p&gt;We already use identifiers such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;request_id
trace_id
span_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those identify technical execution.&lt;/p&gt;

&lt;p&gt;Agents also need something representing the &lt;strong&gt;business objective&lt;/strong&gt;.&lt;/p&gt;

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

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

&lt;/div&gt;



&lt;p&gt;One intent may generate many technical requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REFUND_DUPLICATE_CHARGE_8472
        |
        +-- lookup transaction
        |
        +-- validate eligibility
        |
        +-- create refund
        |
        +-- update CRM
        |
        +-- notify customer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suppose the refund API times out.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Should I POST /refunds again?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the system can ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Has REFUND_DUPLICATE_CHARGE_8472
already produced a successful refund?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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




&lt;h2&gt;
  
  
  A Simple Intent Model
&lt;/h2&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="nf"&gt;AgentIntent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="no"&gt;UUID&lt;/span&gt; &lt;span class="n"&gt;intentId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;resourceId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;IntentStatus&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;resultId&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;IntentStatus&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="no"&gt;PENDING&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;EXECUTING&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;COMPLETED&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;REQUIRES_REVIEW&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;FAILED&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before executing a mutation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;AgentIntent&lt;/span&gt; &lt;span class="n"&gt;intent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intentRepository&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;findById&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intentId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;orElseThrow&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nc"&gt;IntentStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;COMPLETED&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;previousResult&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;resultId&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact implementation will vary.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A retry should refer to the same business intent instead of silently becoming a new action.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Failure Mode 3: Every Tool Succeeds, but the Workflow Is Wrong
&lt;/h1&gt;

&lt;p&gt;Imagine an account-closing agent.&lt;/p&gt;

&lt;p&gt;It successfully executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Cancel subscription
✓ Revoke API credentials
✓ Delete files
✓ Generate final invoice
✓ Close account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every API returns success.&lt;/p&gt;

&lt;p&gt;But company policy requires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Export compliance archive
BEFORE
Delete files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent skipped the archive.&lt;/p&gt;

&lt;p&gt;Five green tool calls.&lt;/p&gt;

&lt;p&gt;One invalid business process.&lt;/p&gt;

&lt;p&gt;This is why agent observability cannot stop at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tool call succeeded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Was the workflow itself valid?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Put a Deterministic Gate Between Reasoning and Mutation
&lt;/h1&gt;

&lt;p&gt;For read-only operations, directly exposing tools may be reasonable.&lt;/p&gt;

&lt;p&gt;For high-impact actions, I prefer an architecture like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Goal
   ↓
AI Agent
   ↓
Intent + Policy Gate
   ↓
Tool Gateway
   ↓
Business API
   ↓
Outcome Verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before issuing a refund, deterministic code can verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transaction belongs to authenticated user
AND transaction is refundable
AND amount &amp;lt;= remaining refundable amount
AND approval threshold is satisfied
AND intent has not already completed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model proposes.&lt;/p&gt;

&lt;p&gt;The system verifies.&lt;/p&gt;

&lt;p&gt;The API executes.&lt;/p&gt;

&lt;p&gt;The system verifies again.&lt;/p&gt;

&lt;p&gt;That separation is important.&lt;/p&gt;




&lt;h1&gt;
  
  
  Authorised Does Not Mean Appropriate
&lt;/h1&gt;

&lt;p&gt;Security controls still matter enormously.&lt;/p&gt;

&lt;p&gt;But authorisation alone does not solve every agent problem.&lt;/p&gt;

&lt;p&gt;Suppose an agent legitimately has permission to call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restartProductionService()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credentials are valid.&lt;/p&gt;

&lt;p&gt;The operator has the correct role.&lt;/p&gt;

&lt;p&gt;But should the service restart now?&lt;/p&gt;

&lt;p&gt;Perhaps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a deployment is currently running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;an incident is already active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;traffic is at its daily peak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;another restart happened 30 seconds ago
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;Who are you?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Are you allowed to perform this operation?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agentic systems also need:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is this action appropriate in the current context?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That requires policy, state, and sometimes human judgement.&lt;/p&gt;




&lt;h1&gt;
  
  
  Define Preconditions and Postconditions
&lt;/h1&gt;

&lt;p&gt;Many tools are described approximately like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;issue_refund&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Refund a customer transaction&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That tells the model what the tool does.&lt;/p&gt;

&lt;p&gt;It does not define the conditions that make using it safe.&lt;/p&gt;

&lt;p&gt;A stronger contract might be:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="na"&gt;preconditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;transaction belongs to authenticated customer&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;transaction is refundable&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;amount &amp;lt;= remaining refundable balance&lt;/span&gt;

&lt;span class="na"&gt;execution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;idempotency_required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="na"&gt;postconditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;refund record exists&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;refund references expected transaction&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;refund amount matches approved amount&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ledger state reconciles&lt;/span&gt;

&lt;span class="na"&gt;approval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;required_above&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now success is not simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function returned successfully
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;preconditions satisfied
+
action executed
+
postconditions verified
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Don’t Let the Agent Grade Its Own Homework
&lt;/h1&gt;

&lt;p&gt;A tempting pattern is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent performs action
↓
Agent asks itself:
"Did that work?"
↓
Agent continues
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For low-risk workflows, this may be sufficient.&lt;/p&gt;

&lt;p&gt;For important actions, it is fragile.&lt;/p&gt;

&lt;p&gt;If the model misunderstood the original request, asking the same model whether its interpretation was correct may reproduce the same mistake.&lt;/p&gt;

&lt;p&gt;High-impact actions should be verified against external evidence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;database state
payment receipt
ledger state
policy engine
independent validator
sensor state
human approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;It should not invent them.&lt;/p&gt;




&lt;h1&gt;
  
  
  Observability Needs to Move Above HTTP
&lt;/h1&gt;

&lt;p&gt;Imagine this dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;refund-api availability:       99.99%
tool-call success rate:        98.9%
average API latency:           310 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything appears healthy.&lt;/p&gt;

&lt;p&gt;But you are not measuring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wrong-target actions
duplicate mutations
policy violations
unverified outcomes
human reversals
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agentic systems need higher-level metrics.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;verified_outcome_rate
duplicate_action_rate
postcondition_failure_rate
human_override_rate
ambiguous_outcome_rate
intent_reconciliation_rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A meaningful future SLO might look like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;99.95% of high-impact agent intents complete with a verified business outcome and no duplicate side effect.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That tells us far more than API availability.&lt;/p&gt;




&lt;h1&gt;
  
  
  A Safer End-to-End Example
&lt;/h1&gt;

&lt;p&gt;Suppose a user tells an AI commerce agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cancel my duplicate order and refund it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of immediately executing actions, the workflow could be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Create intent
   CANCEL_DUPLICATE_ORDER_9821

2. Retrieve candidate orders

3. Deterministically verify:
   - same customer
   - duplicate item
   - matching amount
   - cancellable state

4. Generate action preview:
   Cancel Order A1842
   Refund £74.99

5. Request human confirmation if required

6. Cancel order using intent ID

7. Issue refund using same intent context

8. Verify:
   order == CANCELLED
   refund == CONFIRMED
   refund amount == £74.99

9. Mark intent COMPLETED

10. Tell user:
    "Done"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 10 is the important part.&lt;/p&gt;

&lt;p&gt;The agent does not say “done” because it received &lt;code&gt;200 OK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It says “done” because the system verified the intended business outcome.&lt;/p&gt;




&lt;h1&gt;
  
  
  Six Controls I’d Use for High-Impact Agent Actions
&lt;/h1&gt;

&lt;p&gt;For any agent capable of moving money, modifying production systems, changing permissions, deleting information, or performing irreversible actions:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Explicit intent
&lt;/h2&gt;

&lt;p&gt;Persist the actual business objective.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Least-privilege tools
&lt;/h2&gt;

&lt;p&gt;Expose only capabilities required for the task.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Deterministic preconditions
&lt;/h2&gt;

&lt;p&gt;Keep critical business rules outside the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Idempotent mutations
&lt;/h2&gt;

&lt;p&gt;Design retries so repeating a request does not repeat the side effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Independent postcondition verification
&lt;/h2&gt;

&lt;p&gt;Verify the resulting state using trusted systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Outcome-level auditability
&lt;/h2&gt;

&lt;p&gt;Connect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user intent
→ agent decision
→ policy result
→ tool call
→ API response
→ verified business state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives us:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Intent
  ↓
Policy
  ↓
Action
  ↓
Receipt
  ↓
Verification
  ↓
Outcome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt
  ↓
Tool
  ↓
200 OK
  ↓
"Done!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Agent-Facing APIs May Need Richer Contracts
&lt;/h1&gt;

&lt;p&gt;Traditional APIs mainly answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What operation can I call?
What arguments are required?
What response will I receive?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI-agent-facing capabilities may need to expose more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What risk level does this action carry?
Is the operation reversible?
Does it require approval?
Can it be retried safely?
What preconditions must hold?
What proves successful completion?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That turns the API from a simple interface into something closer to a &lt;strong&gt;capability contract&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The AI supplies flexible reasoning.&lt;/p&gt;

&lt;p&gt;The surrounding system supplies deterministic guarantees.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thought
&lt;/h1&gt;

&lt;p&gt;We are investing enormous effort in making AI agents smarter.&lt;/p&gt;

&lt;p&gt;Better models.&lt;/p&gt;

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

&lt;p&gt;More tools.&lt;/p&gt;

&lt;p&gt;Longer workflows.&lt;/p&gt;

&lt;p&gt;Greater autonomy.&lt;/p&gt;

&lt;p&gt;But once an agent can modify the real world, the hardest production question may not be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can the model determine what to do?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we prove that what it just did was actually what the user intended?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most dangerous failure may never generate an exception.&lt;/p&gt;

&lt;p&gt;It may not trigger PagerDuty.&lt;/p&gt;

&lt;p&gt;It may not appear in the error logs.&lt;/p&gt;

&lt;p&gt;Every service may remain healthy.&lt;/p&gt;

&lt;p&gt;All you may see is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API succeeded.&lt;/p&gt;

&lt;p&gt;The AI agent completed its task.&lt;/p&gt;

&lt;p&gt;And the business still lost.&lt;/p&gt;

&lt;p&gt;That is why production Agentic AI needs more than successful tool calls.&lt;/p&gt;

&lt;p&gt;It needs &lt;strong&gt;verified outcomes&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  References and Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OWASP — LLM06: Excessive Agency:&lt;/strong&gt; guidance on risks caused by excessive functionality, permissions, and autonomy in LLM applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OWASP — Agentic AI Security:&lt;/strong&gt; emerging guidance for autonomous AI applications and tool-enabled agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NIST — AI Agent Identity and Authorization:&lt;/strong&gt; work examining how established identity and authorisation practices apply to software and AI agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Well-Architected Framework — Idempotent Mutating Operations:&lt;/strong&gt; guidance for making retries safe in distributed systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe API Documentation — Idempotent Requests:&lt;/strong&gt; a practical example of retry-safe financial API mutations.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
