<?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: Ajay Devineni</title>
    <description>The latest articles on DEV Community by Ajay Devineni (@ajaydevineni).</description>
    <link>https://dev.to/ajaydevineni</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%2F3862822%2Fddbc52cd-519d-4344-bea2-effb2a513786.png</url>
      <title>DEV Community: Ajay Devineni</title>
      <link>https://dev.to/ajaydevineni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ajaydevineni"/>
    <language>en</language>
    <item>
      <title>The Arson We Applaud</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Mon, 10 Aug 2026 02:07:53 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/the-arson-we-applaud-569a</link>
      <guid>https://dev.to/ajaydevineni/the-arson-we-applaud-569a</guid>
      <description>&lt;p&gt;It's cool to be the engineer who fixes the outage at 3 AM. It's cooler to build the system that never paged anyone in the first place.&lt;/p&gt;

&lt;p&gt;I've spent eleven years in banking and infrastructure, and if there's one pattern I keep running into, it's this: we've built an entire culture around celebrating the fix and almost none around celebrating the absence of the fire. The allnighter gets a shoutout in standup. The frantic Slack thread becomes a story people tell in interviews. The "great save" gets a line in the postmortem doc. Meanwhile, the quarter where nothing broke  the actual goal of the job  gets nothing. No one writes that post.&lt;/p&gt;

&lt;p&gt;I don't think this is a people problem. I think it's a tooling and incentive problem, and it's one I've been trying to chip away at with a set of governance primitives I've been opensourcing under a project called &lt;code&gt;agentsre&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firefighting vs. arson
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable framing I keep coming back to: most of the incidents we praise ourselves for resolving heroically were, somewhere upstream, avoidable. Someone shipped a change without enough signal about current system health. Someone deployed into a service that was already sitting on a thin error budget. Someone (or increasingly, some agent) took an irreversible action against a wide blast radius without anyone in the loop asking "should we, right now, given everything else in flight?"&lt;/p&gt;

&lt;p&gt;We reward the firefighting. We rarely examine the arson.&lt;/p&gt;

&lt;p&gt;The engineers I trust most in this industry are the boring ones. Their systems selfheal. Their runbooks are short because the failure modes they'd need are rare. They automated the toil away instead of building an identity around absorbing it. That's not a flashy skill set. It doesn't generate a satisfying story arc. But it's the actual craft.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "engineering the absence of heroics" looks like in practice
&lt;/h2&gt;

&lt;p&gt;Talk is easy here, so I want to point at something concrete instead of just restating the philosophy. The newest piece in &lt;code&gt;agentsre&lt;/code&gt; is a PreAction SRE Gate  a small, composable guardrail that evaluates whether a statechanging action (a deploy, a config push, an autoscale event, a tool call made by an autonomous agent) should be allowed to proceed before it runs, based on the system's current ability to absorb that risk.&lt;/p&gt;

&lt;p&gt;The shape of it is simple. You describe the action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ActionRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rolloutpaymentsapiv42&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;blast_radius&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reversible&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;initiated_by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent:deploybot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;paymentsapi&lt;/span&gt;&lt;span class="sh"&gt;"&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;And a set of evaluators error budget health, blast radius, concurrent inflight changes, and how much track record the initiating agent has each contribute a bounded risk score with a plainEnglish reason attached. The gate combines those into ALLOW, HOLD, or BLOCK, weighted so a single severe risk factor can't get diluted by several calm ones.&lt;/p&gt;

&lt;p&gt;The part I care about most is the agentorigin evaluator. As more actions in production systems start being initiated by autonomous agents rather than humans, the implicit risk judgment a human operator makes ("is now a good time to ship this?") doesn't happen automatically anymore it has to be engineered back in, explicitly, or it just disappears. An agent with no established track record gets treated more conservatively by default than a human operator would be. Trust gets earned from observed behavior over time, not assumed because the caller is automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than it used to
&lt;/h2&gt;

&lt;p&gt;For most of my career, "reliability engineering" meant reacting well: good alerting, fast rollback, clean incident response. That's still necessary. But it's built around the assumption that a human is the one taking the risky action, and that some judgment is happening before the action fires. That assumption is eroding fast as agentic systems take on more autonomous execution in production environments. If we don't build the preaction judgment back into the systems themselves, we're going to get a lot more 3 AM pages, except now nobody will be able to tell you which agent, executing which plan, decided the timing was fine.&lt;/p&gt;

&lt;p&gt;99.99% uptime was never about heroics. It's the absence of heroics, engineered on purpose, on the days nobody's watching and nothing gets written up.&lt;/p&gt;

&lt;p&gt;The full implementation, along with the rest of the SLI and governance primitives I've been building for agentic infrastructure, is open source: github.com/Ajay150313/agentsre.&lt;/p&gt;

&lt;p&gt;I'd like to hear from other people building or operating agentic systems what does your team's pre action risk story look like right now? Is there one, or is it still "the agent has good judgment, probably"?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sre</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>I Built an LLM That Reads Compliance Regulations and Blocks Non-Compliant Code Deployments IEEE Published the Results</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Fri, 07 Aug 2026 22:48:17 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/i-built-an-llm-that-reads-compliance-regulations-and-blocks-non-compliant-code-deployments-ieee-e1m</link>
      <guid>https://dev.to/ajaydevineni/i-built-an-llm-that-reads-compliance-regulations-and-blocks-non-compliant-code-deployments-ieee-e1m</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%2F6638y2qoviaorb0dpsko.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6638y2qoviaorb0dpsko.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My paper on LLM-based regulatory compliance automation for financial DevOps was published at IEEE ICCBI 2026. The core idea sounds almost too good: an LLM reads regulatory documents (Basel III, GDPR, PCI-DSS), extracts compliance rules, and blocks non-compliant code from deploying. Here's how we actually built it, and where the hard problems are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Manual Compliance Is Broken
&lt;/h2&gt;

&lt;p&gt;Financial institutions face regulatory requirements that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Written in legal prose, not machine executable rules&lt;/li&gt;
&lt;li&gt;Updated frequently — GDPR guidance evolves, Basel capital requirements change, new national AI regulations appear&lt;/li&gt;
&lt;li&gt;Jurisdictionally contradictory a system compliant with GDPR may violate a local data sovereignty law in a different market&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The standard approach: a compliance team manually translates regulations into a static checklist, developers manually verify their changes against the checklist, and an audit team manually verifies everything before regulators arrive.&lt;/p&gt;

&lt;p&gt;This doesn't work at DevOps velocity. Code ships 10–50 times per day. The compliance team can't review every commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM Solution — And Its Problems
&lt;/h2&gt;

&lt;p&gt;The framework uses an LLM to do what compliance officers do: read regulatory text and extract actionable rules. But naively prompting an LLM with "here is GDPR article 25, what does it require?" creates a dangerous new problem: hallucination in compliance contexts.&lt;/p&gt;

&lt;p&gt;A compliance system that confidently generates incorrect requirements is worse than no compliance system.&lt;/p&gt;

&lt;p&gt;Here's how the framework addresses this:&lt;/p&gt;

&lt;h3&gt;
  
  
  RAG-Backed Rule Generation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.compliance&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RegulatoryRuleExtractor&lt;/span&gt;

&lt;span class="n"&gt;extractor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RegulatoryRuleExtractor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;llm_backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bedrock&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# Amazon Bedrock for financial services
&lt;/span&gt;    &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;anthropic.claude-3-5-sonnet&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;rag_source_bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3://compliance-docs/regulations/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;citation_required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="c1"&gt;# EVERY rule must cite source text
&lt;/span&gt;    &lt;span class="n"&gt;confidence_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;       &lt;span class="c1"&gt;# Low-confidence rules go to human review
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Extract rules from regulatory document
&lt;/span&gt;&lt;span class="n"&gt;rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;extractor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;gdpr_article_25_data_protection_by_design.pdf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data_storage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;encryption&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;access_control&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;retention&lt;/span&gt;&lt;span class="sh"&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;# Returns structured rules WITH citations
# {
#   'rule_id': 'GDPR-25-1',
#   'requirement': 'Personal data must be encrypted at rest using AES-256 or equivalent',
#   'source_citation': 'GDPR Article 25(1): "...appropriate technical measures..."',
#   'confidence': 0.94,
#   'infrastructure_targets': ['S3', 'RDS', 'EBS', 'DynamoDB']
# }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key design decision: the LLM never operates from memory. It always re-reads the source regulatory document through RAG before generating a rule. This eliminates the most dangerous hallucination vector — stale or fabricated regulatory requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  CI/CD Gate Integration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/compliance-gate.yml (conceptual)&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Compliance Gate&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;compliance-check&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Evaluate Compliance Impact&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;agentsre-compliance evaluate \&lt;/span&gt;
            &lt;span class="s"&gt;--diff ${{ github.event.pull_request.diff_url }} \&lt;/span&gt;
            &lt;span class="s"&gt;--rule-registry $COMPLIANCE_REGISTRY_URL \&lt;/span&gt;
            &lt;span class="s"&gt;--jurisdictions "US,EU,UK" \&lt;/span&gt;
            &lt;span class="s"&gt;--failure-mode strict \&lt;/span&gt;
            &lt;span class="s"&gt;--output compliance-report.json&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Block on Non-Compliance&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;steps.compliance-check.outputs.compliant == 'false'&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;echo "::error::Compliance violations detected. See compliance-report.json"&lt;/span&gt;
          &lt;span class="s"&gt;cat compliance-report.json&lt;/span&gt;
          &lt;span class="s"&gt;exit 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gate evaluates the code diff — not just the final state — because compliance violations are often introduced in specific changes and obscured in the final artifact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Jurisdictional Conflict Resolution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.compliance&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;JurisdictionResolver&lt;/span&gt;

&lt;span class="n"&gt;resolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;JurisdictionResolver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;jurisdictions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;GDPR&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CCPA&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PDPA_SG&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LGPD_BR&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;conflict_strategy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;strictest_wins&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;human_escalation_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;direct_conflict&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# When GDPR requires deletion within 30 days
# and local law requires retention for 7 years:
# → Escalate to human policy decision, don't resolve autonomously
&lt;/span&gt;&lt;span class="n"&gt;resolution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rule_set&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;strictest_wins&lt;/code&gt; for ambiguity, &lt;code&gt;human_escalation&lt;/code&gt; for direct conflict. This is the right failure mode for regulated systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard Problems We Haven't Fully Solved
&lt;/h2&gt;

&lt;p&gt;Regulatory update propagation: When a regulatory body issues guidance that amends an existing regulation without changing the source document, the RAG system won't catch it. We handle this with a human-curated "regulatory update feed" that triggers rule re-extraction when new guidance is published.&lt;/p&gt;

&lt;p&gt;Legacy system integration: Some financial systems expose compliance-relevant configurations only through mainframe JCL or COBOL report outputs. Parsing these into a format the framework can evaluate required custom adapters — not generalizable.&lt;/p&gt;

&lt;p&gt;False positive rate in blocking mode: Early versions of the framework blocked 30% of legitimate deployments with false positive compliance violations. After tuning confidence thresholds and adding a "remediation suggestion" layer (not just FAIL, but "here's how to fix it"), false positive rates dropped to acceptable levels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Benchmarked against manual compliance processes and rule-based automated tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compliance coverage: LLM framework covers regulatory requirements that static rule engines miss — particularly ambiguous or cross-referenced clauses&lt;/li&gt;
&lt;li&gt;Audit preparation time: Reduced from weeks to hours through continuous audit trail generation&lt;/li&gt;
&lt;li&gt;Regulatory update lag: Near-zero — framework re-extracts rules from updated source documents automatically&lt;/li&gt;
&lt;li&gt;CI/CD throughput impact: Minimal — async validation for low-risk changes, synchronous blocking only for high-risk patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;agentsre
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;agentsre.compliance&lt;/code&gt; subpackage (in development) implements the rule extraction and CI/CD gate components. Contributions welcome.&lt;/p&gt;

&lt;p&gt;GitHub: github.com/Ajay150313/agentsre&lt;br&gt;&lt;br&gt;
Paper: IEEE ICCBI 2026, Paper ID ICCBI-870 → &lt;a href="https://ieeexplore.ieee.org/abstract/document/11619889" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/11619889&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Google Scholar: scholar.google.com/citations?user=AyVSzecAAAAJ&lt;/p&gt;




&lt;p&gt;If you're implementing compliance automation in a regulated industry — financial services, healthcare, government I'd genuinely like to hear what approaches you've tried. Particularly interested in how teams handle LLM confidence calibration for high-stakes decisions.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Published IEEE Research on ML-Driven Incident Prediction for Banking Cloud Here's What Actually Works in Production</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Fri, 07 Aug 2026 22:32:40 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/i-published-ieee-research-on-ml-driven-incident-prediction-for-banking-cloud-heres-what-actually-577o</link>
      <guid>https://dev.to/ajaydevineni/i-published-ieee-research-on-ml-driven-incident-prediction-for-banking-cloud-heres-what-actually-577o</guid>
      <description>&lt;p&gt;My paper on machine learning-driven incident prediction for banking cloud operations was just published at &lt;strong&gt;IEEE ICCBI 2026&lt;/strong&gt;. I want to share the actual technical substance  not just the abstract because the engineering details are what SRE practitioners can actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem in Plain Terms
&lt;/h2&gt;

&lt;p&gt;You're on-call for a banking platform. 3 AM. CloudWatch fires 47 alerts in 90 seconds. Half are noise. One is the early signal of a cascade that, in 20 minutes, will take down payment processing for 300,000 customers.&lt;/p&gt;

&lt;p&gt;You can't tell which one.&lt;/p&gt;

&lt;p&gt;This is the state of most SRE operations today: &lt;strong&gt;reactive, threshold-based, and drowning in noise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The paper presents a framework that inverts this. Instead of reacting to symptoms, you predict incidents 15–45 minutes before they materialize, with enough confidence to trigger automated remediation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Actually Built
&lt;/h2&gt;

&lt;p&gt;The framework has four stages. I'll describe them as code-level concepts, not academic abstractions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Telemetry Normalization
&lt;/h3&gt;

&lt;p&gt;Raw cloud metrics are useless for ML  they have wildly different scales, units, and sampling frequencies. The first stage normalizes everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.proactive&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TelemetryNormalizer&lt;/span&gt;

&lt;span class="n"&gt;normalizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TelemetryNormalizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cpu_utilization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;memory_pressure&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;network_rx_bytes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
             &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;disk_iops&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;app_error_rate&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db_connection_pool_usage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;window_minutes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;fill_strategy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;forward_fill&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# critical for banking metrics with gaps
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;normalized_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_metrics_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without normalization, a CPU spike from 40% to 80% and a memory leak from 85% to 87% look incomparable. After normalization, you can see that the memory trajectory is more dangerous despite smaller absolute change.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Feature Engineering  The Differentiator
&lt;/h3&gt;

&lt;p&gt;Most practitioners skip this. It's where most of the predictive signal lives.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.proactive&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TemporalFeatureExtractor&lt;/span&gt;

&lt;span class="n"&gt;extractor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TemporalFeatureExtractor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;lag_windows&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;   &lt;span class="c1"&gt;# minutes before current timestamp
&lt;/span&gt;    &lt;span class="n"&gt;rolling_stats&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mean&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;std&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;p95&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;p99&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;seasonality_encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;       &lt;span class="c1"&gt;# banking has strong daily/weekly patterns
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# This creates ~200 features from 6 raw metrics
&lt;/span&gt;&lt;span class="n"&gt;feature_matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;extractor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normalized_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The lag features are key. Incidents in banking cloud don't appear instantaneously — they have precursor signatures 30–60 minutes earlier. Standard monitoring tools never see these because they only look at current values.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. LSTM Prediction Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch.nn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IncidentPredictionLSTM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hidden_dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_layers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# output_dim=3: probability of [LOW, MEDIUM, HIGH] severity incident
&lt;/span&gt;        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lstm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LSTM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_dim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hidden_dim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_layers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                           &lt;span class="n"&gt;batch_first&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dropout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;classifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Sequential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hidden_dim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ReLU&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Dropout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dim&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Softmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;lstm_out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lstm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;classifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lstm_out&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&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;Why LSTM specifically? Banking cloud has strong temporal dependencies overnight batch processing, market-open transaction spikes, end-of-month settlement windows. LSTM networks capture these patterns; standard ML models (random forests, XGBoost) do not.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Response Orchestration
&lt;/h3&gt;

&lt;p&gt;Predictions without action are dashboards, not engineering. The framework closes the loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.proactive&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ProactiveResponseOrchestrator&lt;/span&gt;

&lt;span class="n"&gt;orchestrator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ProactiveResponseOrchestrator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;high_severity_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;medium_severity_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HIGH&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;page_oncall&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;scale_out_asg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;enable_circuit_breaker&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MEDIUM&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;notify_slack&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pre_warm_cache&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;alert_dbas&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LOW&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;log_to_dashboard&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;queue_for_review&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&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;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;In simulated banking cloud environments, the framework demonstrated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excellent prediction accuracy for both high-severity and low severity incidents&lt;/li&gt;
&lt;li&gt;15–45 minute predictive window enough time for automated OR human response&lt;/li&gt;
&lt;li&gt;Significant reduction in alert fatigue through confidence-scored predictions vs. binary threshold alerts&lt;/li&gt;
&lt;li&gt;Measurable improvement in system uptime through proactive intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What You Can Steal For Your Team Right Now
&lt;/h2&gt;

&lt;p&gt;Even without deploying the full LSTM stack, you can apply the core ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Add temporal lag features to your existing ML monitoring — if you're already using any ML for anomaly detection, adding 15/30/60-minute lag features of your key metrics will improve accuracy without changing models&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implement confidence-scored alerting — replace binary threshold alerts with probability-based alerts. &lt;code&gt;P(incident) &amp;gt; 0.8&lt;/code&gt; is more actionable than &lt;code&gt;cpu_utilization &amp;gt; 80%&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Close the feedback loop — log every prediction with its eventual outcome. This labeled dataset is gold for retraining and is free to collect from day one&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;agentsre
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;agentsre.proactive&lt;/code&gt; subpackage implements all six components of this framework. The library is MIT licensed, production-tested, and actively maintained.&lt;/p&gt;

&lt;p&gt;GitHub: github.com/Ajay150313/agentsre&lt;br&gt;&lt;br&gt;
Paper: IEEE ICCBI 2026, Paper ID ICCBI-874 → &lt;a href="https://ieeexplore.ieee.org/abstract/document/11619688" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/11619688&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Google Scholar: scholar.google.com/citations?user=AyVSzecAAAAJ&lt;/p&gt;

&lt;p&gt;Drop a comment if you've tackled incident prediction in production I'm particularly interested in how teams handle concept drift when the incident distribution shifts after a major infrastructure change.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>devops</category>
      <category>sre</category>
    </item>
    <item>
      <title>The Vendors Shipped Autonomous SRE Agents. Here's the Governance Layer They Didn't Ship</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Fri, 07 Aug 2026 01:51:10 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/the-vendors-shipped-autonomous-sre-agents-heres-the-governance-layer-they-didnt-ship-45he</link>
      <guid>https://dev.to/ajaydevineni/the-vendors-shipped-autonomous-sre-agents-heres-the-governance-layer-they-didnt-ship-45he</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%2Fknxflm97qeiy7fsr6ir3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fknxflm97qeiy7fsr6ir3.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft published a real production number this week: Azure SRE Agent has mitigated more than 35,000 incidents and saves over 20,000 engineering hours per month across Microsoft's own services. Dynatrace launched their Autonomous SRE Agent in August 2026 — their Chief Product Officer framing it directly: "Most observability platforms stop at data, leaving humans to find answers, determine what to do, and execute."&lt;/p&gt;

&lt;p&gt;Both statements are true. The technology is working at scale. And the governance layer that determines whether you can trust those autonomous decisions is almost never part of the product announcement.&lt;/p&gt;

&lt;p&gt;This article covers what the SRE community needs to build for itself five metrics that measure autonomous SRE agent behavior at the semantic layer, where vendor observability stops.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Press Releases Don't Cover
&lt;/h2&gt;

&lt;p&gt;Microsoft's 20,000 engineering hours saved per month means tens of thousands of autonomous decisions made. Some percentage of those decisions are wrong. Not because the technology is bad — because all production systems fail at the tail, and autonomous systems that act on imperfect information will sometimes act incorrectly.&lt;/p&gt;

&lt;p&gt;The responsible question is not whether to use autonomous SRE agents. The responsible question is: how do you know when the agent's decision was wrong, and what do you do about it?&lt;/p&gt;

&lt;p&gt;Azure SRE Agent, Dynatrace Autonomous SRE Agent, AWS DevOps Agent, PagerDuty SRE Agent — all of them are shipping this year. None of them ship with the five measurement patterns below. That's not a criticism. It's a gap the SRE community is positioned to close.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Governance Metrics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Root Cause Accuracy Rate (RCAR)
&lt;/h3&gt;

&lt;p&gt;RCAR measures the percentage of agent root cause attributions confirmed correct in your postmortem record, tracked per incident category.&lt;/p&gt;

&lt;p&gt;Why per category matters: an agent with 94% overall accuracy may have 70% accuracy for the specific incident class that represents your highest-stakes failures. Overall accuracy hides this. Per-category RCAR surfaces it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.ai_sre_governance&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AISREAgentGovernor&lt;/span&gt;

&lt;span class="n"&gt;governor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AISREAgentGovernor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_space_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-autonomous-sre-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;rcar_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;85.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;arer_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;hor_warning_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;30.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# After each postmortem — wire to your incident management webhook
&lt;/span&gt;&lt;span class="n"&gt;governor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_investigation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INC-2026-0805-001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database-failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;root_cause_confirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;# postmortem verdict
&lt;/span&gt;    &lt;span class="n"&gt;remediation_executed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;remediation_rolled_back&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;human_overrode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&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;Alert threshold: RCAR &amp;lt; 85% for any category over 7 days → suspend autonomous remediation for that category. Not all categories — just the one that's degrading.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Autonomous Remediation Error Rate (ARER)
&lt;/h3&gt;

&lt;p&gt;ARER measures the percentage of autonomous remediations that required rollback or correction. This is your blast radius signal — the metric that tells you whether wrong investigations are being acted upon.&lt;/p&gt;

&lt;p&gt;The risk profile is asymmetric: a wrong investigation that was caught before action is recoverable. A wrong investigation followed by an autonomous remediation applied to the wrong component is a different category of failure entirely.&lt;/p&gt;

&lt;p&gt;Alert threshold: ARER &amp;gt; 5% → suspend all autonomous remediations immediately, page the named SRO.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;governor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database-failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;breached&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Suspend autonomy for this category
&lt;/span&gt;        &lt;span class="nf"&gt;disable_autonomous_remediation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;alert_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Human Override Rate (HOR)
&lt;/h3&gt;

&lt;p&gt;HOR measures the percentage of agent recommendations that on-call engineers override before execution. This is the leading indicator  engineers begin overriding before RCAR measurably falls.&lt;/p&gt;

&lt;p&gt;When an engineer overrides the agent's recommendation, they're telling you the agent's model of the system no longer matches their understanding of reality. That's the earliest possible signal of drift — earlier than any metric that requires waiting for a postmortem.&lt;/p&gt;

&lt;p&gt;Alert threshold: HOR &amp;gt; 30% for any incident category → review the agent's topology model and context freshness before RCAR falls.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Decision Quality Rate (DQR)
&lt;/h3&gt;

&lt;p&gt;DQR measures the percentage of agent decisions falling within expected behavioral bounds against a rolling baseline. It is not an accuracy metric — it doesn't require ground truth labels. It's a drift detection signal that fires before user-visible failures.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TaskRecord&lt;/span&gt;

&lt;span class="n"&gt;collector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;collector&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="nc"&gt;TaskRecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;t-001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;task_class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident-triage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;decision_confidence&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# drifting from 0.91 baseline
&lt;/span&gt;    &lt;span class="n"&gt;required_escalation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;completed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;collector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident-triage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;breached&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;alert_oncall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;alert_message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alert threshold: DQR &amp;lt; 85% for 15 minutes → reduce autonomy level before the incident escalates.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Approval Queue Depth Drift (AQDD)
&lt;/h3&gt;

&lt;p&gt;AQDD is the metric that standard SLO burn-rate alerts structurally cannot detect. When tasks are submitted for human approval and humans fall behind, the queue grows silently — no completion event, no failure event, no burn. Standard SLO dashboards show healthy. Operations are degrading.&lt;/p&gt;

&lt;p&gt;Alert threshold: AQDD &amp;gt; 2x baseline for 30 minutes → human review layer is saturated, page SRO immediately.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Progressive Autonomy Model
&lt;/h2&gt;

&lt;p&gt;These five metrics gate a progressive autonomy model for autonomous SRE agents:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 1 — Triage only:&lt;/strong&gt; DQR and TIE instrumented. Agent surfaces signals. Humans decide everything. No RCAR or ARER needed yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 2 — Advised actions:&lt;/strong&gt; HER tracked. Agent recommends remediation. Human approves every action. RCAR begins as measurement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 3 — Bounded autonomy:&lt;/strong&gt; RCAR &amp;gt; 85% sustained 30 days for a specific incident category → agent executes autonomously for that category. ARER tracked. Any breach suspends autonomy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 4 — Governed autonomy:&lt;/strong&gt; All five metrics active and within bounds. Named SRO. Quarterly review of all categories.&lt;/p&gt;

&lt;p&gt;Microsoft's Azure SRE Agent is operating at Level 3-4 for specific incident classes across Microsoft's internal services. That's what 35,000 incidents and 20,000 hours saved means. The governance model that makes it possible is the same model described above — it's just not in the press release.&lt;/p&gt;




&lt;h2&gt;
  
  
  What To Do This Week
&lt;/h2&gt;

&lt;p&gt;If your team is evaluating Dynatrace Autonomous SRE Agent, AWS DevOps Agent, or any autonomous SRE tooling launching this month:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instrument DQR and TIE first — observation mode, no alerts yet&lt;/li&gt;
&lt;li&gt;Run 30 days of behavioral baseline before setting any threshold&lt;/li&gt;
&lt;li&gt;Register a named SRO before enabling any autonomous remediation&lt;/li&gt;
&lt;li&gt;Start at Level 1 (triage only). Earn Level 2 with 30 days of data.&lt;/li&gt;
&lt;li&gt;Write the postmortem process for the agent before the first wrong decision — not after&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The vendors shipped the capability this week. The governance is yours to build.&lt;/p&gt;

&lt;p&gt;Open-source implementation: &lt;a href="https://github.com/Ajay150313/agentsre" rel="noopener noreferrer"&gt;https://github.com/Ajay150313/agentsre&lt;/a&gt;&lt;br&gt;
LinkedIn discussion: &lt;a href="https://www.linkedin.com/feed/update/urn:li:groupPost:6585254-7490483687269064704/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU" rel="noopener noreferrer"&gt;https://www.linkedin.com/feed/update/urn:li:groupPost:6585254-7490483687269064704/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which of the five metrics does your team currently track for your autonomous SRE tooling?&lt;/p&gt;

</description>
      <category>sre</category>
      <category>agentaichallenge</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>MCP Final Spec Shipped. Now It Needs SRE Governance</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Wed, 29 Jul 2026 01:53:54 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/mcp-final-spec-shipped-now-it-needs-sre-governance-533e</link>
      <guid>https://dev.to/ajaydevineni/mcp-final-spec-shipped-now-it-needs-sre-governance-533e</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%2Fp3k7s24on3txsrzm04sl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3k7s24on3txsrzm04sl.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The Model Context Protocol shipped its final specification on July 28, 2026 — adding Tasks and MCP Apps extensions, with LangGraph 1.0 treating MCP tools as first-class graph nodes and Netzilo shipping cross-platform runtime kill switches for compromised agents.&lt;/p&gt;

&lt;p&gt;MCP stops being an experimental protocol today. It is production infrastructure.&lt;/p&gt;

&lt;p&gt;Production infrastructure needs SRE governance. Here is what that looks like for MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed in the Final Spec
&lt;/h2&gt;

&lt;p&gt;The final MCP spec introduces two extensions that change the reliability picture significantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tasks:&lt;/strong&gt; Long-running operations are now a first-class primitive in MCP. An agent can initiate a task, the MCP server executes it asynchronously, and the result is available when complete. This is not a workaround — it is the specified behavior. Tasks can now run for minutes or hours autonomously without the agent polling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Apps:&lt;/strong&gt; A standardized way for MCP servers to expose UI components alongside tool calls. Agents can now interact with structured interfaces, not just raw function returns.&lt;/p&gt;

&lt;p&gt;The reliability implication of both: MCP is no longer a request-response protocol with human-timescale latency. It is an orchestration layer for long-running autonomous work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four SRE Gaps That Arrive With the Final Spec
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Every MCP Tool Needs an SLO
&lt;/h3&gt;

&lt;p&gt;Your agent's reliability is bounded by the worst MCP server it calls. An agent that calls five MCP tools has five dependency SLOs. If any one fails silently — returning an unexpected format, timing out without an error, returning stale data — your agent's Decision Quality Rate degrades with no infrastructure-layer signal.&lt;/p&gt;

&lt;p&gt;Instrument Tool Invocation Efficiency per MCP server, not just per task class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TaskRecord&lt;/span&gt;

&lt;span class="n"&gt;collector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Track per MCP server — not just per task
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;mcp_server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_calls&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;mcp_trace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_calls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;collector&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="nc"&gt;TaskRecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;task_class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;mcp_server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# per-server tracking
&lt;/span&gt;        &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;decision_confidence&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_confidence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;completed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_completed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Each MCP server gets its own TIE baseline and breach alert
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;collector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;mcp_server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you per-MCP-server behavioral baselines. When a specific server starts generating elevated tool call counts — retry storms, format changes, latency degradation — TIE catches it before it surfaces as task failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. MCP Circuit Breaker at the Boundary
&lt;/h3&gt;

&lt;p&gt;When an MCP tool fails, what does your agent do? Most frameworks retry. Retry logic without a circuit breaker at the MCP boundary produces retry storms — the agent calls a failing tool repeatedly, TIE climbs silently, and the first observable signal is a cost spike.&lt;/p&gt;

&lt;p&gt;Apply the circuit breaker at the MCP call layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentChainCircuitBreaker&lt;/span&gt;

&lt;span class="c1"&gt;# Circuit breaker per MCP server
&lt;/span&gt;&lt;span class="n"&gt;mcp_breakers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;AgentChainCircuitBreaker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;open_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;85.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# open if semantic success rate drops below 85%
&lt;/span&gt;        &lt;span class="n"&gt;close_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;95.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# close after recovery
&lt;/span&gt;        &lt;span class="n"&gt;on_state_change&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;alert_mcp_server_owner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;mcp_servers&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_mcp_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;breaker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mcp_breakers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;breaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;allow_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Circuit open — route to fallback or human escalation
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fallback_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mcp_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;validate_mcp_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;breaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Long-Running Tasks Need Approval Gates
&lt;/h3&gt;

&lt;p&gt;The Tasks extension means an MCP operation can run for minutes or hours. During that time, the agent is making autonomous decisions with no human checkpoint. The governance question is not whether Tasks should exist — it's which tasks get an approval gate and which run fully autonomous.&lt;/p&gt;

&lt;p&gt;Map your task classes to your blast radius tiers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.production_readiness&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;

&lt;span class="n"&gt;MCP_TASK_GATES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;log-analysis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;# fully autonomous
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;config-validation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;# fully autonomous
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service-restart&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MEDIUM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# approve before execute
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database-migration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;# always human approval
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;credential-rotation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CRITICAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;# named approver + audit
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;should_gate_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;tier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MCP_TASK_GATES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tier&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CRITICAL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Kill Switches Need Runbooks
&lt;/h3&gt;

&lt;p&gt;Netzilo ships kill switches for compromised agents. A kill switch without a runbook is a panic button — you know how to stop the agent, but not what to check, what to preserve for the postmortem, or how to safely restart.&lt;/p&gt;

&lt;p&gt;Before enabling any MCP-connected agent in production, write three runbook sections:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trigger conditions:&lt;/strong&gt; What observable signal causes you to reach for the kill switch? TIE &amp;gt; 3x baseline? AQDD &amp;gt; 5x? An out-of-scope API call in your audit log?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kill procedure:&lt;/strong&gt; Kill switch activation → preserve agent state for postmortem → notify dependent systems → route pending tasks to human queue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery criteria:&lt;/strong&gt; What must be true before restarting the agent? Root cause identified, blast radius assessed, SLO targets reviewed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting to the Existing Framework
&lt;/h2&gt;

&lt;p&gt;The MCP final spec adds one new governance requirement to the existing agentsre framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-MCP-server TIE tracking&lt;/strong&gt; — instrument &lt;code&gt;task_class=f"mcp:{server_name}"&lt;/code&gt; for each server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP boundary circuit breaker&lt;/strong&gt; — &lt;code&gt;AgentChainCircuitBreaker&lt;/code&gt; at the MCP call layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task blast radius mapping&lt;/strong&gt; — &lt;code&gt;BlastRadiusTier&lt;/code&gt; per MCP task class&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kill switch runbook&lt;/strong&gt; — added to &lt;code&gt;RunbookDefinition&lt;/code&gt; detection/containment/recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else in the governance framework — DQR, HER, AQDD, RCAR, named SRO, pre-go-live validator — applies unchanged.&lt;/p&gt;

&lt;p&gt;Open-source implementation: &lt;a href="https://github.com/Ajay150313/agentsre" rel="noopener noreferrer"&gt;https://github.com/Ajay150313/agentsre&lt;/a&gt;&lt;br&gt;
LinkedIn discussion: &lt;a href="https://www.linkedin.com/feed/update/urn:li:groupPost:6585254-7488048830827966464/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU" rel="noopener noreferrer"&gt;https://www.linkedin.com/feed/update/urn:li:groupPost:6585254-7488048830827966464/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's your biggest reliability concern now that MCP Tasks are a production primitive?&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>sre</category>
      <category>agentaichallenge</category>
    </item>
    <item>
      <title>Your AI Agent Framework Has a CVE. Here's the SRE Security Model That Fixes It.</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Sat, 25 Jul 2026 01:32:23 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/your-ai-agent-framework-has-a-cve-heres-the-sre-security-model-that-fixes-it-50pp</link>
      <guid>https://dev.to/ajaydevineni/your-ai-agent-framework-has-a-cve-heres-the-sre-security-model-that-fixes-it-50pp</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%2Fuzfwha6tzltnhj00s53w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuzfwha6tzltnhj00s53w.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CISA added Langflow to its Known Exploited Vulnerabilities catalog in July 2026. CVE-2026-55255, CVSS 9.9 — an access control flaw in the &lt;code&gt;/api/v1/responses&lt;/code&gt; endpoint that let any authenticated user execute flows belonging to another user, exposing embedded LLM provider keys and cloud credentials.&lt;/p&gt;

&lt;p&gt;It is the first AI agent orchestration platform on the KEV list. The same list as Windows zero-days, Cisco IOS vulnerabilities, and OpenSSL critical patches. The list that US federal agencies are required to remediate on fixed timelines.&lt;/p&gt;

&lt;p&gt;The operational implication is straightforward: AI agent frameworks are now treated as critical infrastructure by the cybersecurity community. The security model for experimental tooling is not adequate. The security model for critical infrastructure is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Exploit Actually Looked Like
&lt;/h2&gt;

&lt;p&gt;The Langflow vulnerability was not a model failure. The LLM did nothing wrong. The exploit path was entirely in the orchestration layer — the software built around the model to give it tools, memory, and production access.&lt;/p&gt;

&lt;p&gt;The attack chain, documented by Sysdig between June 22–25, 2026:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Attacker authenticates to a Langflow instance (any user account)&lt;/li&gt;
&lt;li&gt;Supplies a victim's flow UUID to the &lt;code&gt;/api/v1/responses&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;No ownership check — endpoint executes the victim's flow&lt;/li&gt;
&lt;li&gt;LLM provider API keys, cloud credentials, and database secrets embedded in the flow are now accessible&lt;/li&gt;
&lt;li&gt;Attacker chains with Langflow RCE CVE-2026-33017 to stage second-stage implants&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The damage came from what the agent was allowed to do: read credentials, execute arbitrary flows, communicate outward. Three ordinary capabilities, chained by an attacker through an authorization gap in the framework.&lt;/p&gt;

&lt;p&gt;This is the security shape of AI agents in 2026. The production question is no longer "did the model answer safely?" It is "what is the agent allowed to see, call, and change — and who can control that from outside?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Zero Trust — July 2026's Dominant Security Theme
&lt;/h2&gt;

&lt;p&gt;Adversa AI's July 2026 security report documents the shift: the dominant theme across the month is "Agent Zero Trust." Google DeepMind and Anthropic have both published frameworks stating the same principle: treat AI agents as potential insider threats.&lt;/p&gt;

&lt;p&gt;Not because agents are malicious. Because they have the access profile of a malicious insider: broad system access, autonomous execution, and the ability to read, write, and communicate across your production environment.&lt;/p&gt;

&lt;p&gt;The Zero Trust model applied to AI agents means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify every action — not just at authentication time&lt;/li&gt;
&lt;li&gt;Grant minimum necessary permissions per task class — not broad system access&lt;/li&gt;
&lt;li&gt;Monitor what the agent accesses, not just what it outputs&lt;/li&gt;
&lt;li&gt;Treat context inputs as untrusted — prompt injection through data sources is an active exploit class&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cycode's 2026 report adds the operational baseline: 80% of IT workers have already observed AI agents performing tasks without authorization. The threat is not theoretical.&lt;/p&gt;




&lt;h2&gt;
  
  
  The SRE Security Model for AI Agents
&lt;/h2&gt;

&lt;p&gt;The SRE community has been applying defense-in-depth to production infrastructure for two decades. The same principles apply to AI agent frameworks — with specific adaptations for the failure modes that make agents different from traditional software.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Treat AI Agent Frameworks as Infrastructure — Not Libraries
&lt;/h3&gt;

&lt;p&gt;The Langflow CVE makes this concrete: an agent orchestration framework that has production database connections, cloud credentials, and LLM API keys embedded in it is infrastructure. It requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Patch schedules&lt;/strong&gt;: same cadence as your OS and network hardware, not the same as a Python package update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change control&lt;/strong&gt;: framework version upgrades go through your deployment pipeline with behavioral canary testing (this is what &lt;code&gt;agentsre.sprawl.FrameworkVersionGovernance&lt;/code&gt; implements)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access reviews&lt;/strong&gt;: who can reach the Langflow endpoint, who can create flows, who can execute other users' flows — reviewed quarterly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vulnerability scanning&lt;/strong&gt;: agent frameworks added to your CVE monitoring the same as any other infrastructure component&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Least Privilege Per Task Class
&lt;/h3&gt;

&lt;p&gt;The Langflow exploit was possible because flows had access to credentials they needed for legitimate use — but the authorization model didn't prevent cross-user execution. The fix at the architectural layer is least privilege scoped to task class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.production_readiness&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusAssessment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;

&lt;span class="c1"&gt;# Scope permissions to the minimum required for each task class
# Same principle as IAM least privilege — applied to AI agents
&lt;/span&gt;&lt;span class="n"&gt;assessment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BlastRadiusAssessment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BlastRadiusTier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# read-only until demonstrated reliable
&lt;/span&gt;    &lt;span class="n"&gt;can_execute_writes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            &lt;span class="c1"&gt;# no write access at initial deployment
&lt;/span&gt;    &lt;span class="n"&gt;can_modify_infrastructure&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;# never at initial deployment
&lt;/span&gt;    &lt;span class="n"&gt;worst_case_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Read-only access — credential exposure limited to read scope&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;acceptable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;signed_off_by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;security-lead@team.com&lt;/span&gt;&lt;span class="sh"&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;# Promote to MEDIUM only after:
# - 30 days observation at LOW with zero security events
# - RCAR &amp;gt; 85% — root cause accuracy demonstrated
# - Named security reviewer sign-off
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each task class gets its own permission scope. An agent that summarizes logs doesn't need the permissions required to restart services. An agent that correlates alerts doesn't need write access to your configuration store.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Context Is an Attack Surface — Treat External Inputs as Untrusted
&lt;/h3&gt;

&lt;p&gt;The EchoLeak vulnerability (CVE-2025-32711, CVSS 9.3) established the attack pattern a year ago: a single crafted email caused Microsoft 365 Copilot to exfiltrate sensitive data by following instructions hidden in the email's content. The agent behaved helpfully — exactly as designed. The instructions happened to be malicious.&lt;/p&gt;

&lt;p&gt;Every external data source your agent reads is a potential injection vector:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Emails, tickets, and support messages&lt;/li&gt;
&lt;li&gt;Log files and error reports (Adversa AI documented 85% exploitation success rate via Sentry error reports)&lt;/li&gt;
&lt;li&gt;Code comments and PR descriptions (CVE-2025-53773, CVSS 9.6 — GitHub Copilot RCE via PR descriptions)&lt;/li&gt;
&lt;li&gt;RAG knowledge base documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The operational requirement: sanitize and validate all external inputs before they reach the agent's context window. Treat every user-generated artifact as potentially adversarial.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Runtime Monitoring of Agent Actions — Not Just Outputs
&lt;/h3&gt;

&lt;p&gt;Current AI agent observability watches what the agent produces. Agent Zero Trust requires watching what the agent does during execution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which data sources did it access?&lt;/li&gt;
&lt;li&gt;Which APIs did it call?&lt;/li&gt;
&lt;li&gt;What did it write or modify?&lt;/li&gt;
&lt;li&gt;Did it attempt to access resources outside its permitted scope?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the runtime monitoring layer that sits above the semantic SLIs (DQR, TIE, HER) and below the infrastructure metrics. It's the agent equivalent of CloudTrail — an audit log of agent actions, not just agent results.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Production Security Checklist
&lt;/h2&gt;

&lt;p&gt;Before any AI agent framework touches production credentials, external APIs, or customer data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;□ Framework added to vulnerability management process (CVE monitoring + patch schedule)
□ Access control reviewed — who can execute flows, who can read credentials
□ Least privilege scoped per task class (BlastRadiusTier assessed and signed off)
□ External input sanitization in place for all data sources the agent reads
□ Runtime action logging enabled — audit trail of what the agent accesses
□ Credential isolation — LLM API keys and cloud credentials in secrets manager, not embedded in flows
□ Named security reviewer (separate from SRO) who reviews permission scope quarterly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Connecting to the Broader Framework
&lt;/h2&gt;

&lt;p&gt;The AI-SRE governance framework now has a security layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;agentsre.production_readiness&lt;/strong&gt; — BlastRadiusAssessment + 5 pre-go-live checks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;agentsre.sprawl.FrameworkVersionGovernance&lt;/strong&gt; — behavioral canary before framework upgrades (catches both performance regressions and behavior changes from security patches)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;agentsre.ai_sre_governance&lt;/strong&gt; — RCAR, ARER, HOR for ongoing governance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Langflow CVE adds one requirement to the pre-go-live checklist: framework added to vulnerability management process. The rest of the security model follows from SRE principles already in place.&lt;/p&gt;

&lt;p&gt;Has your team added your AI agent framework to your vulnerability management process?&lt;/p&gt;

</description>
      <category>sre</category>
      <category>ai</category>
      <category>agentaichallenge</category>
      <category>security</category>
    </item>
    <item>
      <title>60% of SREs Don't Trust AI Agents Enough to Deploy Them. Here's How to Build the Trust Layer</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Wed, 22 Jul 2026 02:12:27 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/60-of-sres-dont-trust-ai-agents-enough-to-deploy-them-heres-how-to-build-the-trust-layer-1d3o</link>
      <guid>https://dev.to/ajaydevineni/60-of-sres-dont-trust-ai-agents-enough-to-deploy-them-heres-how-to-build-the-trust-layer-1d3o</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%2Flc530f5d7h64bw361mmk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flc530f5d7h64bw361mmk.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Register published a survey this week of 696 SRE and DevOps experts. The headline number: 73% are not using AIOps in production. Only 8% have deployed it. 19% are in pilot.&lt;/p&gt;

&lt;p&gt;The question worth sitting with isn't why adoption is low. It's why the 60% who cited lack of trust as their #1 barrier haven't been able to close that gap — even as the vendors selling AI SRE tooling multiply weekly.&lt;/p&gt;

&lt;p&gt;The answer is straightforward once you name it: trust in production systems is not built through demonstrations or benchmarks. It's built through sustained measurement. You trust your database because you have 90 days of error rate, query latency, and replication lag data showing it behaves within expected bounds. You trust your Kubernetes cluster because liveness probes, resource limits, and rolling deployment gates have been running for months.&lt;/p&gt;

&lt;p&gt;AI agents don't get a different deal. You trust them when you can measure them — and right now, most teams can't.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Measurement Gap Underneath the Trust Gap
&lt;/h2&gt;

&lt;p&gt;The same Futurum Group enterprise survey that found 71% of companies claim to deploy AI agents also found that only 11% of intended agentic use cases from the previous year actually reached production. The gap between "claiming to deploy" and "actually in production" isn't primarily a capability gap. It's a governance and measurement gap.&lt;/p&gt;

&lt;p&gt;Teams that reach production with AI agents share one thing: they instrumented the agent's behavioral baseline before they tried to set SLO targets, and they set SLO targets before they enabled autonomous actions. The sequence matters. You cannot trust something you haven't measured. You cannot govern something you don't trust.&lt;/p&gt;

&lt;p&gt;The measurement layer that builds trust for AI agents has five components, each addressing a failure mode that standard infrastructure observability misses entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Five Measurements That Build Trust
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Decision Quality Rate (DQR) — Is the agent making valid decisions?
&lt;/h3&gt;

&lt;p&gt;DQR measures the percentage of agent decisions falling within expected behavioral bounds against a rolling baseline. It is not an accuracy metric — it doesn't require ground truth labels. It's a drift detection signal: a drop in DQR tells you something in the agent's environment changed before that change produces user-visible failures.&lt;/p&gt;

&lt;p&gt;Standard observability: HTTP 200, latency 142ms, error rate 0.0%. All green.&lt;br&gt;
DQR: decision confidence 0.91 → 0.61 over 4 hours. Something drifted.&lt;/p&gt;

&lt;p&gt;Alert threshold: DQR &amp;lt; 85% for 15 minutes → investigate before users notice.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Tool Invocation Efficiency (TIE) — Is it working harder than it should?
&lt;/h3&gt;

&lt;p&gt;TIE measures the ratio of tool calls per task completion against a rolling baseline. When an agent compensates for degraded tools, stale context, or framework overhead, it invokes more tools per task. TIE rising above 1.5x baseline is a signal that something in the agent's environment has degraded — even if every individual tool call succeeds.&lt;/p&gt;

&lt;p&gt;This is the metric that catches retry loops before the billing cycle closes. It's also the signal that catches framework upgrade regressions before they surface as wrong outputs.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Human Escalation Rate (HER) — Is it handing off more than expected?
&lt;/h3&gt;

&lt;p&gt;HER measures the percentage of tasks requiring human intervention. Set a budget — 5% is a reasonable starting point. When HER climbs above that budget, the agent is telling you it's operating outside its reliable envelope. The signal is direct: more escalation means less reliable autonomous operation.&lt;/p&gt;

&lt;p&gt;HER also gates production readiness. An agent with HER &amp;gt; 5% in the 30-day observation window is not ready for production. This is the readiness probe equivalent for AI agents.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Approval Queue Depth Drift (AQDD) — Are humans falling behind?
&lt;/h3&gt;

&lt;p&gt;AQDD tracks tasks submitted for human approval against a baseline. Standard SLO burn-rate alerts miss this failure mode entirely: the tasks are submitted, the agent thinks it's working, but humans aren't reviewing fast enough and the queue grows silently.&lt;/p&gt;

&lt;p&gt;Alert threshold: AQDD &amp;gt; 2x baseline for 30 minutes → human review layer is saturated.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Root Cause Accuracy Rate (RCAR) — Is the diagnosis actually right?
&lt;/h3&gt;

&lt;p&gt;RCAR is the trust metric for AI SRE agents specifically. It measures the percentage of root cause attributions confirmed correct in subsequent postmortems, per incident category.&lt;/p&gt;

&lt;p&gt;An agent with 94% overall accuracy may have 70% accuracy for the specific incident class that represents your highest-stakes scenarios. RCAR per category surfaces this. Set a threshold: RCAR &amp;lt; 85% for any category over 7 days → suspend autonomous remediation for that category.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Trust-Building Sequence
&lt;/h2&gt;

&lt;p&gt;Trust in AI agents is not built by deploying them and watching. It's built through a specific sequence:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30 days of observation before any SLO target.&lt;/strong&gt; Instrument all five metrics in read-only mode. Record what the agent actually does — DQR baseline, TIE baseline, HER baseline. You cannot commit to reliability you haven't measured. Skipping this step is why pilots fail to convert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLO targets before autonomous actions.&lt;/strong&gt; Set your targets based on the observation window data. DQR target should be the 10th percentile of your observation window, not a vendor default. HER target should reflect what your team's review capacity can actually sustain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Named SRO before production.&lt;/strong&gt; One person — not a team. Their pager fires when the SLO breaches. This is the accountability layer that converts measurement into action. Without it, a breaching metric has no owner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runbook before the first incident.&lt;/strong&gt; Write what you'll do when DQR drops, when TIE spikes, when RCAR falls below threshold. Two hours to write. Six hours saved on the first real incident.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TaskRecord&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentsre.production_readiness&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentGoLiveValidator&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: 30 days of observation
&lt;/span&gt;&lt;span class="n"&gt;collector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSLICollector&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;collector&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="nc"&gt;TaskRecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;t-001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;task_class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident-triage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;decision_confidence&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.91&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;completed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Step 2: Review baselines after 30 days, then set SLOs
# Step 3: Register SRO before enabling autonomous actions
&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentGoLiveValidator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# ... register SLO, SRO, runbook, blast radius
&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident-triage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="c1"&gt;# Fix any blocking failures before go-live
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why 89% of Planned Deployments Don't Reach Production
&lt;/h2&gt;

&lt;p&gt;The Futurum Group data says 71% of businesses claim to be deploying AI agents but only 11% of intended use cases actually reached production last year. The gap is the governance sequence above, skipped.&lt;/p&gt;

&lt;p&gt;Teams that skip the 30-day observation period don't have baselines. Without baselines, they can't set meaningful SLO targets. Without SLO targets, every anomaly is noise — there's no threshold to tell them whether the agent is within acceptable bounds. Without that signal, trust doesn't build. The pilot stalls.&lt;/p&gt;

&lt;p&gt;The technology is ready. The measurement practice is the missing step.&lt;/p&gt;

&lt;p&gt;The trust gap closing requires the same thing that closed the Kubernetes adoption gap in 2018: a governance layer that makes reliability measurable, owned, and governed. SLOs, named owners, runbooks. Applied to the AI agent layer.&lt;/p&gt;

&lt;p&gt;Open-source implementation: &lt;a href="https://github.com/Ajay150313/agentsre" rel="noopener noreferrer"&gt;https://github.com/Ajay150313/agentsre&lt;/a&gt;&lt;br&gt;
LinkedIn discussion: &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7485516083882508288?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU" rel="noopener noreferrer"&gt;https://www.linkedin.com/feed/update/urn:li:activity:7485516083882508288?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACIp55QBRGVmAcEbf0D-1PaR5vEbm2yMcJU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the one metric your team would need to trust an AI agent with autonomous remediation?&lt;/p&gt;

</description>
      <category>sre</category>
      <category>agentaichallenge</category>
      <category>devops</category>
      <category>rag</category>
    </item>
    <item>
      <title>Your AI Agent Has a 95% Success Rate. Your Workflow Has a 36% Success Rate. Here's the SRE Fix.Tags</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Fri, 17 Jul 2026 01:36:50 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/your-ai-agent-has-a-95-success-rate-your-workflow-has-a-36-success-rate-heres-the-sre-fixtags-oi4</link>
      <guid>https://dev.to/ajaydevineni/your-ai-agent-has-a-95-success-rate-your-workflow-has-a-36-success-rate-heres-the-sre-fixtags-oi4</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%2Frzlaa76iyq0k3bu7nfcd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frzlaa76iyq0k3bu7nfcd.jpeg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your AI Agent Has a 95% Success Rate. Your Workflow Has a 36% Success Rate. Here's the SRE Fix. number published this week has been sitting with me since I read it.At 95% per-step accuracy — which is optimistic for current LLMs — a 10-step agent workflow succeeds roughly 60% of the time. At 20 steps, you're at 36%.That math comes from Lusser's Law, which reliability engineers have known since the 1950s. The reliability of a series of components equals the product of their individual reliabilities. We apply it to hardware systems, distributed architectures, deployment pipelines. We have not been applying it to AI agent workflows — and the industry is starting to feel the consequences.Microsoft's Azure SRE Agent team found that problems requiring more than four handoffs almost always failed. That's not a benchmark result. That's a production observation from the team that built one of the most sophisticated AI SRE systems in existence.Gartner predicts over 40% of agentic AI projects will be canceled by end of 2027 because of costs, unclear value, or inadequate risk controls.The inadequate risk controls part is what I want to address. Because the risk is calculable. And if the risk is calculable, it can be governed.Why the Demo Number LiesDemos usually hide compounding failure because they only show two or three steps. Production environments are usually five or more steps over messy inputs and edge cases.A demo that shows an agent complete a task in three steps with clean data is showing you 0.95^3 = 0.857 — 85.7% reliability. That looks good. Your stakeholders are impressed.The same agent deployed to a production incident investigation workflow with 10 steps is giving you 0.95^10 = 0.599 — just under 60% reliability. In SRE terms: your agent is failing roughly four out of ten production incident investigations, silently, without throwing an error.This mathematical reality makes autonomous multi-step workflows fundamentally challenging at production scale, requiring teams to rethink how they architect agent systems.Rethinking the architecture is exactly right. But it's not enough to know the math. You need a framework for governing the math — which is what SRE discipline gives you.The Missing SLO LayerWe have SLOs for services. We have error budgets for APIs. We have reliability targets for databases.We have almost none of that for agent workflows.A microservice either returns a 200 or it doesn't. AI agents return responses on a spectrum from correct to confidently wrong. Everyone's shipping agents. Almost nobody has a framework for deciding how much failure is acceptable.That's the gap. And it's the same gap SRE filled for microservices fifteen years ago.The answer isn't "make every step more reliable." At scale that's impossible — you can't prompt-engineer your way to 99.9% per-step accuracy across a complex incident investigation workflow. The answer is what SRE has always done: define an acceptable failure rate, measure against it, and design the system to fail gracefully when it breaches.Introducing the Workflow Reliability BudgetA Workflow Reliability Budget (WRB) applies error budget thinking to multi-step agent workflows rather than to individual services.The calculation:WRB = R_target / R_actual&lt;/p&gt;

&lt;p&gt;where R_actual = (P_step)^n (Lusser's Law for the full workflow)&lt;br&gt;
and R_target = your acceptable success rate for this workflow classFor an incident investigation workflow with 8 steps and 95% per-step accuracy:pythonfrom agentsre.slo_burn import AgentSLOBurnTracker, SLOTarget&lt;br&gt;
import math&lt;/p&gt;

&lt;p&gt;def calculate_workflow_reliability(&lt;br&gt;
    per_step_accuracy: float,&lt;br&gt;
    num_steps: int&lt;br&gt;
) -&amp;gt; float:&lt;br&gt;
    """&lt;br&gt;
    Apply Lusser's Law to calculate end-to-end workflow reliability.&lt;br&gt;
    This is the number your demo hides and your production exposes.&lt;br&gt;
    """&lt;br&gt;
    return per_step_accuracy ** num_steps&lt;/p&gt;

&lt;h1&gt;
  
  
  The math your stakeholders need to see
&lt;/h1&gt;

&lt;p&gt;per_step = 0.95&lt;br&gt;
steps = 8&lt;br&gt;
workflow_reliability = calculate_workflow_reliability(per_step, steps)&lt;/p&gt;

&lt;p&gt;print(f"Per-step accuracy: {per_step:.0%}")&lt;br&gt;
print(f"Workflow steps: {steps}")&lt;br&gt;
print(f"End-to-end reliability: {workflow_reliability:.1%}")&lt;/p&gt;

&lt;h1&gt;
  
  
  Output: End-to-end reliability: 66.3%
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Now wire this to your SLO framework
&lt;/h1&gt;

&lt;p&gt;tracker = AgentSLOBurnTracker(&lt;br&gt;
    agent_id="incident-investigation-agent-v2",&lt;br&gt;
    task_class="multi-step-incident-investigation"&lt;br&gt;
)&lt;/p&gt;

&lt;h1&gt;
  
  
  Workflow-level SLO — not per-step accuracy
&lt;/h1&gt;

&lt;p&gt;tracker.add_slo(SLOTarget(&lt;br&gt;
    metric_name="WorkflowCompletionRate",&lt;br&gt;
    target_pct=90.0,          # 90% end-to-end success&lt;br&gt;
    window_days=30,&lt;br&gt;
    good_threshold=1.0,        # 1.0 = workflow completed successfully&lt;br&gt;
    higher_is_better=True&lt;br&gt;
))&lt;/p&gt;

&lt;h1&gt;
  
  
  DQR at workflow level — not just per tool call
&lt;/h1&gt;

&lt;p&gt;tracker.add_slo(SLOTarget(&lt;br&gt;
    metric_name="WorkflowDQR",&lt;br&gt;
    target_pct=85.0,          # 85% of completed workflows with correct output&lt;br&gt;
    window_days=30,&lt;br&gt;
    good_threshold=0.8,&lt;br&gt;
    higher_is_better=True&lt;br&gt;
))The key insight: WorkflowCompletionRate is not the same as per-step accuracy. A workflow that completed but produced a wrong final answer counts as a failure against DQR even if every intermediate step appeared to succeed. That's the distinction most teams miss.The Three Architecture FixesThe math points to three specific changes that actually move the reliability number:Fix 1: Shorten the chainAchieving high workflow reliability requires either very high per-step accuracy (above 99%), short workflows (fewer steps), or resilience architecture that detects and corrects errors before they compound.Every step you remove from an agent workflow is a multiplicative reliability improvement. An 8-step workflow at 95% per-step accuracy is 66% reliable. A 5-step workflow at the same per-step accuracy is 77% reliable. That's an 11-point improvement from design alone, not from model improvement.In practice: ruthlessly question every step in your agent workflow. If a step retrieves context the agent has already retrieved in a previous step, remove it. If a step validates something that was already validated, combine them. Shorter chains are not lazy design — they are reliability engineering.Fix 2: Add intermediate checkpointsError budgets force you to confront this compounding math instead of pretending each step is independent.The error doesn't compound uniformly — it compounds through dependency. An incorrect output at step 2 feeds into step 3, which builds on wrong context, which makes step 4 worse. By step 6, the agent is reasoning on top of accumulated wrongness.Intermediate checkpoints break this chain. After every two or three steps, the workflow validates intermediate output before continuing. Not a human checkpoint — a programmatic DQR check on the intermediate result.pythonfrom agentsre.reasoning_trace import AgentDecisionTrace&lt;br&gt;
from agentsre.eval_pipeline import EvalRun, EvalCase&lt;/p&gt;

&lt;p&gt;def checkpoint_intermediate_output(&lt;br&gt;
    agent_id: str,&lt;br&gt;
    step_number: int,&lt;br&gt;
    intermediate_output: str,&lt;br&gt;
    expected_properties: list,&lt;br&gt;
    trace: AgentDecisionTrace&lt;br&gt;
) -&amp;gt; bool:&lt;br&gt;
    """&lt;br&gt;
    Validate intermediate output before the next step consumes it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If this checkpoint fails, the workflow stops and replans
rather than compounding the error through subsequent steps.

Returns True if output passes validation. False triggers replan.
"""
# Check each required property of the intermediate output
failed_properties = []
for prop in expected_properties:
    validator_fn = prop.get('validator')
    if validator_fn and not validator_fn(intermediate_output):
        failed_properties.append(prop.get('name'))

if failed_properties:
    # This is a replan event — RTD increments
    trace.record_replan(
        reason=(
            f"Step {step_number} intermediate output failed "
            f"properties: {failed_properties}. "
            "Replanning rather than compounding."
        ),
        tool_that_failed=f"step_{step_number}_output",
        new_plan=f"Retry step {step_number} with corrected inputs"
    )
    return False

return TrueFix 3: RTD as your workflow health signalRTD (Reasoning Trace Depth) already tells you when compounding is happening. When an agent re-plans three times in a 10-step workflow, it's because earlier steps produced outputs the agent couldn't work with cleanly. RTD rising is your leading indicator of compounding failure before the final output reveals it.The signal chain for workflow reliability:RTD rising → intermediate outputs degrading → DQR declining
 ↑                    ↑                        ↑
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;earliest signal      mid-workflow signal      lagging signalIf you're watching only DQR at the workflow level, you're watching the lagging signal. Wire RTD monitoring to your intermediate checkpoint layer and you catch compounding before it propagates through the full chain.The Workflow Reliability Dashboard Query# CloudWatch Insights — workflow reliability trend&lt;br&gt;
fields @timestamp, agent_id, reasoning.rtd, outcome.task_completed,&lt;br&gt;
       quality.confidence_proxy, outcome.latency_ms&lt;br&gt;
| filter trace_type = 'agent_decision_trace'&lt;br&gt;
| filter agent_id = 'incident-investigation-agent-v2'&lt;br&gt;
| stats&lt;br&gt;
    avg(reasoning.rtd) as avg_rtd,&lt;br&gt;
    sum(outcome.task_completed) / count() * 100 as completion_rate_pct,&lt;br&gt;
    avg(quality.confidence_proxy) as avg_confidence&lt;br&gt;
  by bin(1d)&lt;br&gt;
| sort @timestamp ascIf completion_rate_pct is tracking below your WRB target, look at avg_rtd in the same window. Rising RTD before declining completion rate means compounding is starting — you have a window to intervene before the workflow-level SLO breaches.What This Means for Your Agent DesignThe teams that ship design short, checkpointed chains. The teams that stall keep adding steps and hoping.Lusser's Law isn't telling you agents can't work. It's telling you the design constraints for making them work reliably at scale. Fewer steps. Checkpoints between steps. RTD monitoring to catch compounding early. Workflow-level SLOs rather than per-step accuracy benchmarks.The math is the same math reliability engineers have been applying to hardware and distributed systems for decades. The discipline already exists. The application to AI agent workflows is new — but the principles are not.All frameworks referenced in this post are in the agentsre library at github.com/Ajay150313/agentsre. MIT licensed.Ajay Devineni | AWS Community Builder | Senior SRE/Platform EngineerDEV.to Tags:&lt;/p&gt;

&lt;h1&gt;
  
  
  sre #agenticai #devops #aws
&lt;/h1&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>antigravity</category>
      <category>aws</category>
    </item>
    <item>
      <title>Your AI Agent Passed the Gate. Now It's in Production. Here's Why That's When the Real SRE Work Starts</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Sun, 12 Jul 2026 10:32:56 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/your-ai-agent-passed-the-gate-now-its-in-production-heres-why-thats-when-the-real-sre-work-55bo</link>
      <guid>https://dev.to/ajaydevineni/your-ai-agent-passed-the-gate-now-its-in-production-heres-why-thats-when-the-real-sre-work-55bo</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%2Ffwdrleq6869vwo14c14k.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%2Ffwdrleq6869vwo14c14k.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS expanded their DevOps Agent four days ago. It now validates code autonomously before production — assessing changes, running tests, surfacing risks without waiting for a human to trigger it.&lt;br&gt;
I want to write about what that means for SRE practitioners, because I think the conversation around this capability is missing something important.&lt;br&gt;
The narrative is usually framed around speed. How much faster does code get validated? How much MTTR improves? Those numbers are real and they matter. But they measure the easy part.&lt;br&gt;
The hard part isn't getting an AI agent to validate a release. The hard part is knowing whether to trust what it found and what to do when it missed something.&lt;br&gt;
I've been building SLI frameworks for AI agents in production for seven months. Every framework I've built has been motivated by the same underlying question: how do you govern an actor that moves faster than your ability to verify it?&lt;br&gt;
This post is the answer I've landed on for the release validation case specifically.&lt;br&gt;
The Gap Between Observable and Interpretable&lt;br&gt;
MIT Sloan published research showing people are 2.8 times more likely to trust AI systems they can interpret — not just observe, but interpret. The difference matters enormously in practice.&lt;br&gt;
Observable means you can see what happened. The agent ran. It approved the release. A log entry exists.&lt;br&gt;
Interpretable means you understand why. What signals did the agent evaluate? What did it decide to weight heavily? What did it see but discount? What would have caused it to reject instead of approve?&lt;br&gt;
Most AI release validation tools give you the first. Very few give you the second. And in a postmortem after a release caused a production incident, the audit log alone doesn't answer the question you actually need answered: what did the agent see, and why did it say yes?&lt;br&gt;
What Happens When It Gets It Wrong&lt;br&gt;
Last month, a team shared a scenario I've heard variations of a dozen times. Their AI release validation tool approved a change. The change caused a latency regression in a payment processing path that only appeared under specific traffic conditions. Staging didn't catch it. The agent didn't catch it either.&lt;br&gt;
The postmortem question was: what did the agent evaluate? The answer was: we have an approval timestamp and a summary. We don't have a reasoning trace. That's the gap. And it's not a vendor failure — it's a design gap that the SRE team needs to close, because the vendor's job is to ship a capable agent. The SRE team's job is to govern it.&lt;br&gt;
The Three Things You Need Before Trusting AI Release Validation&lt;br&gt;
I've been building toward this over seven months of framework work. Here's what I've concluded about the minimum viable governance layer for AI release validation in a regulated production environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A reasoning trace, not just an audit log
An audit log tells you what the agent did. A reasoning trace tells you how it got there. One structured record per validation run — not per tool call capturing the initial hypothesis, what signals the agent evaluated, how it weighted conflicting evidence, and what would have caused a different outcome.
This is directly related to RTD (Reasoning Trace Depth). A validation agent that evaluates twelve signals in parallel and returns a summary has high RTD and low interpretability. A validation agent that forms a hypothesis, follows the causal chain, and surfaces its reasoning has low RTD and high interpretability. Those two agents might produce the same approval decision. They produce very different postmortem data when they get it wrong.&lt;/li&gt;
&lt;li&gt;A pre-validation state check, not just a post-validation summary
Before an AI agent validates any release, it should check three things about the current state of the system it's validating into:
Error budget remaining if the target service is already burning error budget faster than expected, a release that introduces even a 0.1% error rate increase is a different risk than the same release on a healthy system.
Recent change velocity how many changes have been deployed to this service in the last 24 hours? High velocity plus AI-validated release is a compound risk that deserves human review regardless of what the agent found.
Blast radius of what's being validated — which downstream services could be affected if the validation missed something? An agent validating a change to a payment processing path needs different scrutiny than one validating a change to an internal dashboard.
None of these checks are about the agent's capability. They're about whether the conditions are right for autonomous action.&lt;/li&gt;
&lt;li&gt;A clear escalation path when confidence is below threshold
AI release validation agents don't always produce binary confident decisions. Sometimes the evidence is ambiguous. Sometimes there's a conflict between what the static analysis found and what the load test showed. Sometimes the agent finds something it can't classify.
The question is what happens then. Does the agent approve anyway? Does it block? Does it escalate to a human with a specific question?
The answer should always be the third option when confidence is below a defined threshold — and that threshold should be set by the SRE team, not by the vendor's default configuration.
The Pre-Action SRE Gate from the agentsre library handles this for remediation agents. The same pattern applies here: if the agent's confidence is below threshold, the deployment gates pending human review of the specific conflicting signals. Not a generic "human approved" checkbox a specific review of what the agent couldn't resolve.
The Production Readiness Checklist for AI Release Validation
Before you trust an AI agent to validate releases autonomously in a regulated environment, here's what needs to be in place:
The agent produces one reasoning trace per validation run not a summary, a trace you can replay in a postmortem.
Your error budget is monitored per service, and the validation agent reads it before approving any release.
A confidence threshold is defined and tested below threshold, the agent escalates rather than decides.
A rollback procedure exists that doesn't depend on the same agent that validated the original release.
A revert drill has been practiced in the last 30 days you've confirmed your team can disable the AI validation layer and revert to human-only release management within a defined time window.
The last point is the one most teams skip. When the AI validation layer produces a bad approval and causes an incident, your team needs to be able to operate without it immediately — not after they've spent an hour figuring out how to disable it.
Where This Sits in the Arc
If you've been following this series: Post 1 established that AI agents need on-call rotation discipline. Post 4 introduced DQR, TIE, HER, AQDD as the measurement layer. Post 11 introduced RTD as reasoning observability. Post 13 introduced the Pre-Action SRE Gate.
This post applies all four to the release validation case the specific scenario AWS just made mainstream with their DevOps Agent expansion.
The governance layer doesn't come from the vendor. It comes from the SRE discipline your team already has, applied deliberately to a new class of actor.
All the tools for building it are in the agentsre library at github.com/Ajay150313/agentsre. MIT licensed.
Ajay Devineni | AWS Community Builder | Senior SRE/Platform Engineer&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>agentaichallenge</category>
      <category>sre</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Training a Model Is a Research Skill. Operating One Is an Infrastructure Discipline.</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Thu, 09 Jul 2026 01:36:40 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/training-a-model-is-a-research-skill-operating-one-is-an-infrastructure-discipline-17fn</link>
      <guid>https://dev.to/ajaydevineni/training-a-model-is-a-research-skill-operating-one-is-an-infrastructure-discipline-17fn</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%2F9x4mjp9uiazucpkr53s8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x4mjp9uiazucpkr53s8.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why the AI infrastructure hiring crisis is hiding in plain sight — and what production-grade ML ops actually requires&lt;/p&gt;

&lt;p&gt;I've watched a GPU bill hit five figures in a single day because nobody had a cost circuit breaker on the inference endpoint.&lt;/p&gt;

&lt;p&gt;The model was good. The research team had done real work. The fine-tuning was solid. Nobody had thought about what happens when you put a latency-sensitive LLM inference service behind real production traffic without auto-scaling bounds, without request rate limits, without a cost anomaly alert, and without a rollback path for the model weights.&lt;/p&gt;

&lt;p&gt;The GPU kept serving. The bill kept climbing. The on-call engineer hired for their PyTorch experience, not their production infrastructure instincts — had no runbook for "inference endpoint is costing $800 per hour and accelerating."&lt;/p&gt;

&lt;p&gt;This is the most predictable failure mode in AI infrastructure right now, and it's happening at scale.&lt;/p&gt;

&lt;p&gt;The Hiring Category Error&lt;/p&gt;

&lt;p&gt;The résumé filter that's creating this problem is specific: companies are screening for ML credentials PyTorch, Hugging Face, "fine-tuned a model on custom dataset," Transformers library familiarity — and treating those as sufficient qualification for production infrastructure ownership.&lt;/p&gt;

&lt;p&gt;They are not the same job.&lt;/p&gt;

&lt;p&gt;Training a model is a research skill. It requires deep understanding of loss functions, architecture choices, data pipeline quality, evaluation methodology, and the patience to run experiments that don't converge. It is hard, skilled, important work.&lt;/p&gt;

&lt;p&gt;Operating a model in production is an infrastructure discipline. It requires capacity planning, GPU memory profiling under concurrent load, observability instrumentation that captures what matters for inference (token throughput, first-token latency, KV cache hit rate, queue depth), cost control systems with hard limits, blast radius analysis for every deployment, and a rollback path that actually works at 2:00 AM.&lt;/p&gt;

&lt;p&gt;These overlap at the edges but they are not the same job. Hiring for one and expecting the other is how you get a five-figure GPU bill with no circuit breaker.&lt;/p&gt;

&lt;p&gt;What Changes When You Operate at Scale&lt;/p&gt;

&lt;p&gt;Here is what production ML infrastructure actually demands that doesn't appear on a research-oriented résumé:&lt;/p&gt;

&lt;p&gt;GPU memory is not forgiving. A batch size that runs cleanly on a development P3 instance OOMs at 2x concurrent load on a P5 because nobody modeled the KV cache growth under real traffic patterns. The error is silent on the surface — the request fails, the client retries, the retry amplifies the load. A platform engineer who has done capacity planning knows to model this. A researcher who has done fine-tuning often doesn't.&lt;/p&gt;

&lt;p&gt;Model weights are large artifacts with deployment complexity. A 70B parameter model in BF16 is 140GB. Getting that artifact from your model registry to your inference fleet reliably, with version control, with the ability to roll back without a full redeploy, with pre-warming on the new instances before you shift traffic — this is a software deployment problem, not a machine learning problem. The skills are in the infrastructure domain.&lt;/p&gt;

&lt;p&gt;Inference is a latency-sensitive service. Everything your organization learned about p99 latency, tail latency management, connection pooling, load balancing, circuit breaking, and graceful degradation applies here. The model being impressive doesn't exempt the service from those requirements. Users experiencing 8-second p99 latency on an LLM endpoint don't care that the model architecture is elegant.&lt;/p&gt;

&lt;p&gt;Network egress between regions is expensive at GPU scale. If your training cluster is in us-east-1 and your inference fleet is in us-west-2 and your model artifacts are large and you're pulling them frequently, someone is going to get a bill that surprises them. This is a cost architecture decision. It requires the same thinking as any other distributed system where data movement has cost.&lt;/p&gt;

&lt;p&gt;Cost anomaly detection is non-negotiable. GPU compute is expensive at a rate that makes traditional cost anomaly thresholds meaningless. A virtual machine getting into a runaway state costs you maybe $50/hour. A GPU cluster in a bad state costs you $2,000/hour. Your cost alerting needs to reflect this. Most teams deploy their ML infrastructure with the same cost alerting thresholds they use for their web services, and discover the gap during an incident.&lt;/p&gt;

&lt;p&gt;The "Boring in Production" Standard&lt;/p&gt;

&lt;p&gt;The teams that will build durable AI infrastructure over the next few years aren't the ones with the fanciest models. They're the ones who took the research output seriously enough to subject it to the same operational rigor they apply to everything else.&lt;/p&gt;

&lt;p&gt;Boring in production means:&lt;/p&gt;

&lt;p&gt;The inference endpoint has been load-tested at 3x expected traffic and the degradation behavior is documented and understood&lt;br&gt;
GPU utilization, memory pressure, queue depth, token throughput, and cost per request are all in the same observability dashboard&lt;br&gt;
Model weight rollback takes less than ten minutes and has been practiced in a non-production environment&lt;br&gt;
There is a hard cost ceiling per hour that triggers an automatic circuit breaker and pages the on-call engineer before the bill becomes a conversation with finance&lt;br&gt;
The deployment pipeline is identical to every other service deployment pipeline — version controlled, reviewed, deployed through environments, observable from day one&lt;/p&gt;

&lt;p&gt;None of this is specific to ML. All of it is infrastructure discipline applied to a new category of workload.&lt;/p&gt;

&lt;p&gt;The GPU is expensive compute. The model weights are large artifacts. The inference service is a latency-sensitive API. The fundamentals didn't change. The job of the infrastructure engineer is to make sure the people who believe the fundamentals changed are not the ones with production access.&lt;/p&gt;

&lt;p&gt;What Production-Grade MLOps Actually Requires&lt;/p&gt;

&lt;p&gt;I've been building out the agentsre library with primitives that operationalize these patterns for AI/ML workloads — GPU cost circuit breakers, inference SLI definitions, model artifact governance gates. The design philosophy: every ML workload gets the same reliability treatment as every other production service. No exceptions for the model being impressive.&lt;/p&gt;

&lt;p&gt;The primitives that have been most useful in production:&lt;/p&gt;

&lt;p&gt;A GPU cost rate monitor that tracks cost-per-hour against a session budget and severs inference authority when the rate exceeds the threshold — before the bill, not after.&lt;/p&gt;

&lt;p&gt;An inference SLI framework that defines first-token latency, token throughput, and queue depth as first-class SLIs with error budgets, so reliability of the inference service is measured the same way reliability of any other critical service is measured.&lt;/p&gt;

&lt;p&gt;A model artifact governance gate that validates weight checksums, lineage provenance, and deployment window compliance before any model version reaches production traffic.&lt;/p&gt;

&lt;p&gt;These aren't ML tools. They're SRE tools applied to ML workloads. That's the distinction that matters.&lt;/p&gt;

&lt;p&gt;The Bottom Line for Hiring Teams&lt;/p&gt;

&lt;p&gt;If you're building an AI infrastructure team and your entire interview loop is testing PyTorch knowledge and model architecture understanding, you are hiring for the research half of the job and leaving the operations half to chance.&lt;/p&gt;

&lt;p&gt;The operations half is where the five-figure GPU bills live. It's where the 2:00 AM incidents live. It's where the systems either become boring and reliable or stay exciting and expensive.&lt;/p&gt;

&lt;p&gt;Pair your ML talent with platform engineers who have lived through production incidents, who have oncall rotations, who have been paged because of something they shipped, who have a visceral understanding of blast radius and rollback and "what does this look like at 10x load."&lt;/p&gt;

&lt;p&gt;Make them fight it out until the system is boring.&lt;/p&gt;

&lt;p&gt;Boring in production is the highest compliment you can pay an AI platform.&lt;/p&gt;

&lt;p&gt;What's the most expensive production lesson your team learned from ML infrastructure? Drop it in the comments the more specific, the more useful for everyone trying to avoid the same mistake.&lt;/p&gt;

&lt;p&gt;Tags: #MLOps #AIInfrastructure #SRE #PlatformEngineering #CloudNative #AIOps #DevOps #GPU #LLMOps&lt;/p&gt;

</description>
      <category>gpu</category>
      <category>programming</category>
      <category>aiops</category>
      <category>mlops</category>
    </item>
    <item>
      <title>Your AI Agent Has an IAM Role. That's Not a Feature It's an Uncontrolled Blast Radius.</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Tue, 07 Jul 2026 01:53:59 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/your-ai-agent-has-an-iam-role-thats-not-a-feature-its-an-uncontrolled-blast-radius-5bo3</link>
      <guid>https://dev.to/ajaydevineni/your-ai-agent-has-an-iam-role-thats-not-a-feature-its-an-uncontrolled-blast-radius-5bo3</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%2F74twemj43rnx76t21w1a.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F74twemj43rnx76t21w1a.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Your AI Agent Has an IAM Role. That's Not a Feature It's an Uncontrolled Blast Radius.
&lt;/h1&gt;

&lt;p&gt;Why traditional identity models fail non-deterministic systems, and what enforcement actually looks like at the platform layer&lt;/p&gt;

&lt;p&gt;At 2:14 AM on a Friday, an agentic remediation system I was responsible for made fourteen sequential API calls to AWS in eleven seconds.&lt;/p&gt;

&lt;p&gt;The agent had detected an anomalous CloudWatch alarm. It retrieved a relevant runbook. It synthesized a remediation plan. Then it executed that plan — and each execution step produced a new signal the agent interpreted as requiring another action. Fourteen calls. Eleven seconds. No circuit breaker.&lt;/p&gt;

&lt;p&gt;The IAM role didn't care. Every call was authenticated. Every call was authorized. The cloud provider executes what it receives. It has no concept of whether the call was generated by deterministic application code or a language model in a hallucinated reasoning loop.&lt;/p&gt;

&lt;p&gt;We got lucky that night. The blast radius was contained to a single ECS cluster not serving production traffic. But the architectural failure was real, and it had nothing to do with the quality of the agent's reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Category Error We're Building On
&lt;/h2&gt;

&lt;p&gt;There's a widely-shared mental model in teams deploying infrastructure agents right now: if the model reasons well, the system is safe. Improve the prompt. Add a system message. Constrain the reasoning with better instructions.&lt;/p&gt;

&lt;p&gt;This is the wrong level of enforcement.&lt;/p&gt;

&lt;p&gt;Traditional IAM was designed for deterministic code. When you write an application that calls &lt;code&gt;ec2:TerminateInstances&lt;/code&gt;, you know exactly when that call will be made, with what parameters, under what conditions. The call path is static. The IAM policy is a guard on a known, bounded behavior.&lt;/p&gt;

&lt;p&gt;A language model doesn't have a call path. It has a reasoning trace that produces a call path at runtime one that changes based on the prompt, the context window, the retrieved documents, the tool call history, and whatever the model decides is the next logical step. The IAM role the agent holds doesn't know any of that. It knows the API call that arrived. It executes.&lt;/p&gt;

&lt;p&gt;This means that when a prompt injection payload appears in a retrieved document a log file, a ticket description, a runbook that's been tampered with the execution authority the agent holds becomes the blast radius of that injection. The same IAM role that handles legitimate remediation handles the injected command. The cloud doesn't distinguish.&lt;/p&gt;

&lt;p&gt;Prompt engineering is not a security control at this layer. It is a probabilistic influence on model behavior. Probabilistic is not deterministic. Infrastructure security requires deterministic enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Failure Modes in Practice
&lt;/h2&gt;

&lt;p&gt;Reasoning loops that become API storms&lt;/p&gt;

&lt;p&gt;A model gets into a state where each tool call result is interpreted as evidence that another tool call is needed. Without a runtime circuit breaker, this generates hundreds of API calls before a human notices rate limit exhaustion on critical APIs, unbudgeted cost spikes, and potentially self-inflicted service degradation on the infrastructure the agent was supposed to protect.&lt;/p&gt;

&lt;p&gt;Prompt injection through context retrieval&lt;/p&gt;

&lt;p&gt;An agent retrieving context from a knowledge base, ticket system, or log aggregator is reading content that may have been authored by an adversary. A log line containing an instruction to scale all ASGs to maximum capacity is not a theoretical threat. Agents that pass retrieved content directly into their reasoning context without sanitization are vulnerable. The IAM role has no "was this call generated by an injection payload?" check.&lt;/p&gt;

&lt;p&gt;Authority conflation&lt;/p&gt;

&lt;p&gt;The agent finds a valid path to resolve an alert and executes it. The path has side effects — deleting a deployment that was intentional, terminating an instance running a scheduled batch job, modifying a security group that breaks a dependency. The agent had authority. The action was within scope. Nobody had established that "synthesizing a remediation plan" and "executing against live infrastructure" are two separate authority levels that should be enforced separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Deterministic Enforcement Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;The principle: an AI agent should be allowed to reason, synthesize, and recommend. The decision to execute passes through a deterministic policy engine with no LLM in the critical path.&lt;/p&gt;

&lt;p&gt;This isn't new. It's how safety-critical systems have always been designed. The novel problem is that most teams deploying infrastructure agents haven't made this separation explicit in their architecture.&lt;/p&gt;

&lt;p&gt;Separation of Intent and Action&lt;/p&gt;

&lt;p&gt;The agent produces a proposed action: a structured object describing what it wants to do, to what resource, with what parameters. That object passes to a policy engine — a deterministic validator with no LLM involvement — that checks: Is this resource tagged production? Is this action class permitted at the current error budget level? Has this resource been modified in the last N minutes?&lt;/p&gt;

&lt;p&gt;Approved: execution proceeds. Rejected: the agent receives a structured refusal, the attempt is logged, and the agent has no path to self-authorize beyond what the policy engine allows.&lt;/p&gt;

&lt;p&gt;Runtime anomaly detection with automatic authority severance&lt;/p&gt;

&lt;p&gt;Tool-calling behavior is tracked at runtime: calls per minute, cost per session, resource types touched, action class frequency. When a metric crosses a threshold — more than twenty API calls in sixty seconds, more than ten distinct resource modifications in a session, cost exceeding a per-session budget the circuit breaker severs tool calling authority for the session and pages the on-call engineer.&lt;/p&gt;

&lt;p&gt;The agent doesn't get a warning. Its tool access is revoked at the infrastructure layer. It can continue reasoning and producing recommendations. It cannot execute.&lt;/p&gt;

&lt;p&gt;Isolated runtime containment&lt;/p&gt;

&lt;p&gt;Any agent executing commands against infrastructure should run in a short-lived sandbox with scoped credentials, network egress restrictions, and a maximum session lifetime. When the session ends, the credentials expire. The blast radius of any single session is structurally bounded by the sandbox's resource scope not by the agent's self-restraint.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture Change That Mattered
&lt;/h2&gt;

&lt;p&gt;After the fourteen-call incident, we made three changes. None of them touched the model.&lt;/p&gt;

&lt;p&gt;A runtime session monitor tracked API calls per sixty-second window per agent session. Above fifteen calls, the session's IAM role was suspended via a resource-based policy update and an alert fired. The agent could still reason. It could not execute.&lt;/p&gt;

&lt;p&gt;A pre-execution policy gate sat between the agent's proposed action and any live API call. The gate checked resource tags, action class, and a cooldown registry preventing the same resource from being modified more than once per ten minutes. Every gate decision approved or rejected went to CloudWatch with full context.&lt;/p&gt;

&lt;p&gt;Agent execution moved into short-lived ECS tasks with session scoped IAM roles assumed at task start and automatically expired at task end. No persistent credentials. No carry-over between sessions.&lt;/p&gt;

&lt;p&gt;The agent's reasoning didn't change. The architecture around it changed. That distinction is the entire point: the safety guarantees needed for autonomous infrastructure agents cannot be delegated to the model. They have to be built into the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Question for Platform Teams
&lt;/h2&gt;

&lt;p&gt;If you're deploying autonomous agents that touch live infrastructure, the design review question isn't "does the model reason well enough to be safe?"&lt;/p&gt;

&lt;p&gt;The question is: if the model reasons incorrectly — bad prompt, stale context, prompt injection payload, hallucinated tool-calling loop — does your platform architecture bound the blast radius, or does the agent's IAM role determine it?&lt;/p&gt;

&lt;p&gt;If the answer is "the IAM role determines it," you have an uncontrolled blast radius.&lt;/p&gt;

&lt;p&gt;The controls exist. The architecture patterns are established. The question is whether we build them before the incident, or after.&lt;/p&gt;

&lt;p&gt;How is your team decoupling the agent's reasoning layer from your cloud infrastructure permission boundaries? The more specific the implementation detail, the more useful for everyone building in this space.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>sre</category>
      <category>devops</category>
    </item>
    <item>
      <title>RAG vs. MCP Is the Wrong Question Here's the Right One</title>
      <dc:creator>Ajay Devineni</dc:creator>
      <pubDate>Sun, 05 Jul 2026 20:35:02 +0000</pubDate>
      <link>https://dev.to/ajaydevineni/rag-vs-mcp-is-the-wrong-question-heres-the-right-one-4f63</link>
      <guid>https://dev.to/ajaydevineni/rag-vs-mcp-is-the-wrong-question-heres-the-right-one-4f63</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%2F0ushx7w1abnz0z5slyl8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ushx7w1abnz0z5slyl8.jpeg" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why treating this as an architectural tradeoff is setting your production agents up to fail&lt;/p&gt;

&lt;p&gt;I watched a team's agentic remediation system act on a runbook that was fourteen months stale.&lt;/p&gt;

&lt;p&gt;The RAG retrieval worked correctly. The document ranked highest by cosine similarity. The agent interpreted that retrieval as authorization to execute. The live environment was meaningfully different from what the document described. The remediation made things worse.&lt;/p&gt;

&lt;p&gt;Nobody had explicitly defined where knowing ends and doing begins.&lt;/p&gt;

&lt;p&gt;That is the actual production risk hiding inside the "RAG vs. MCP" framing. Not which technology you pick. Whether you have drawn a hard line between your agent's knowledge layer and its execution layer — and whether that line is enforced in code rather than trusted in assumptions.&lt;/p&gt;

&lt;p&gt;The Category Error&lt;/p&gt;

&lt;p&gt;RAG and MCP don't compete. They answer completely different questions.&lt;/p&gt;

&lt;p&gt;RAG answers: what does the agent know?&lt;/p&gt;

&lt;p&gt;Runbook context. Historical incident patterns. Service documentation. Architecture decision records. Compliance policy text. Everything the agent needs to reason about a situation before it touches anything.&lt;/p&gt;

&lt;p&gt;MCP answers: what can the agent do?&lt;/p&gt;

&lt;p&gt;Live metric fetching. System state queries. Remediation execution. API calls against real infrastructure. All the actions that have a blast radius.&lt;/p&gt;

&lt;p&gt;These two layers have fundamentally different risk profiles. A RAG query that returns a stale document is a reasoning error. An MCP call that executes against a live system based on a stale document is an incident.&lt;/p&gt;

&lt;p&gt;The conflation of these two layers treating "I retrieved something relevant" as equivalent to "I have permission to execute it" removes the safety layer that should sit between them.&lt;/p&gt;

&lt;p&gt;What the Conflation Looks Like in Practice&lt;/p&gt;

&lt;p&gt;Pattern 1: RAG-to-execution without a gate&lt;/p&gt;

&lt;p&gt;An agent retrieves documentation describing how to handle high CPU utilization on a service. The document is from before a major infrastructure migration. The agent, having retrieved relevant context, proceeds directly to execution — restarting pods that no longer exist in the topology described, or modifying configurations that have since moved to a different management plane.&lt;/p&gt;

&lt;p&gt;The retrieval confidence was high. The execution authority was never scoped. There was no check between "I know something relevant" and "I will now act on it."&lt;/p&gt;

&lt;p&gt;Pattern 2: Knowledge queries routed through execution tooling&lt;/p&gt;

&lt;p&gt;The inverse failure. Teams that don't design the boundary explicitly tend to route everything through the heaviest available tool. A query that only needs to retrieve context ends up going through MCP tooling with live-system access — adding latency, consuming rate-limited API quota, and introducing non-determinism into what should be a deterministic knowledge lookup.&lt;/p&gt;

&lt;p&gt;The agent has more execution authority than it needs for the task. This is a blast-radius problem waiting for the right failure condition.&lt;/p&gt;

&lt;p&gt;The Boundary as a Reliability Control&lt;/p&gt;

&lt;p&gt;In SRE practice, we talk about blast radius as a design constraint. You scope the potential damage of any failure before it happens, not after. Circuit breakers, canary deployments, feature flags, staged rollouts — all exist to keep the failure surface bounded.&lt;/p&gt;

&lt;p&gt;The RAG/MCP boundary is the same class of control applied to agentic systems.&lt;/p&gt;

&lt;p&gt;The design question isn't "RAG or MCP?" It's: at what point in this agent's reasoning flow does read-only context become a candidate for execution authority, and what explicit gate exists at that transition?&lt;/p&gt;

&lt;p&gt;That gate needs to be deterministic. It needs to be auditable. And it needs to exist in code, not in the assumption that the model will reason correctly about the distinction every time.&lt;/p&gt;

&lt;p&gt;What an Explicit Boundary Looks Like&lt;/p&gt;

&lt;p&gt;A well-designed agentic system for infrastructure operations has three distinct layers with explicit handoff points.&lt;/p&gt;

&lt;p&gt;Layer 1 — Situational awareness (RAG)&lt;/p&gt;

&lt;p&gt;The agent retrieves runbook context, historical incident data, service topology, and policy constraints. This layer is read-only with no execution authority. The output is a structured context package: what the agent knows about the situation, what precedents exist, what the operational constraints are.&lt;/p&gt;

&lt;p&gt;Layer 2 — Decision gate&lt;/p&gt;

&lt;p&gt;An explicit check before any execution authority is granted. This is where you validate: Is the retrieved context fresh enough to act on? Does the proposed action fall within the pre-approved blast radius? Has a human review been configured for this action class? Is the error budget healthy enough to absorb a remediation attempt?&lt;/p&gt;

&lt;p&gt;This layer is where most agentic systems have nothing. The model reasons through it implicitly. That implicit reasoning is not a reliability control.&lt;/p&gt;

&lt;p&gt;Layer 3 — Execution (MCP)&lt;/p&gt;

&lt;p&gt;Scoped tool calls with explicit permission boundaries. The agent can fetch live metrics, read current system state, and execute approved remediation actions. The scope of what's available in this layer is determined by what passed through Layer 2 — not by what the model decides is appropriate at runtime.&lt;/p&gt;

&lt;p&gt;The War Story That Sharpened This for Me&lt;/p&gt;

&lt;p&gt;A service I was responsible for had an agentic component handling routine disk pressure events. The pattern: detect high disk utilization → retrieve cleanup runbook → execute cleanup steps.&lt;/p&gt;

&lt;p&gt;For eight months it worked correctly. Then we rotated to a new storage backend. The cleanup runbook in the knowledge base hadn't been updated.&lt;/p&gt;

&lt;p&gt;The agent retrieved the old runbook with high confidence — service name matched, symptom description matched, top result by similarity score. It executed against paths that no longer existed as described. The cleanup didn't make things catastrophically worse, but it also didn't fix anything, and it consumed enough API quota that the legitimate remediation attempt that followed hit rate limits.&lt;/p&gt;

&lt;p&gt;The failure wasn't in the retrieval. The failure was that there was no freshness check between retrieval and execution. No gate asking: is this document current enough to act on?&lt;/p&gt;

&lt;p&gt;After that incident we added three architectural controls:&lt;/p&gt;

&lt;p&gt;A document freshness gate on any retrieved context informing an execution decision. If document age exceeded a configured threshold for the action class, the agent escalated to a human.&lt;/p&gt;

&lt;p&gt;A scope limiter on every MCP tool call, tying the available action set to the specific remediation class that was approved — not to everything the agent had tool access to.&lt;/p&gt;

&lt;p&gt;A dry-run mode for remediation actions above a configured blast-radius threshold, staging planned changes as a human-reviewable diff before executing.&lt;/p&gt;

&lt;p&gt;None of these are model improvements. All of them are architectural controls. The model's reasoning didn't change. What changed was the system around it.&lt;/p&gt;

&lt;p&gt;The Question Worth Asking Your Team&lt;/p&gt;

&lt;p&gt;If you're building or operating infrastructure agents right now, the design review question isn't "are we using RAG or MCP?" Both answers are probably yes.&lt;/p&gt;

&lt;p&gt;The question is: is the boundary between your knowledge retrieval layer and your execution layer explicitly enforced in code, or is it implicitly trusted in the model's reasoning?&lt;/p&gt;

&lt;p&gt;If the answer is "the model handles that," you don't have a boundary. You have an assumption.&lt;/p&gt;

&lt;p&gt;Assumptions are not reliability controls.&lt;/p&gt;

&lt;p&gt;Drop your approach in the comments — how are you enforcing the knowing/doing boundary in your agentic systems? The more specific the implementation detail, the more useful it is for everyone building in this space.&lt;/p&gt;

&lt;p&gt;Tags: #AgenticAI #MCP #RAG #SRE #PlatformEngineering #CloudNative #AIOps #Observability&lt;/p&gt;

</description>
      <category>rag</category>
      <category>mcp</category>
      <category>sre</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
