<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Imran Siddique on Medium]]></title>
        <description><![CDATA[Stories by Imran Siddique on Medium]]></description>
        <link>https://medium.com/@isiddique?source=rss-fc2c693dc406------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*yY5Pb7NVSJ7GX_4bCpg7Mg.jpeg</url>
            <title>Stories by Imran Siddique on Medium</title>
            <link>https://medium.com/@isiddique?source=rss-fc2c693dc406------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 15 Apr 2026 04:09:45 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@isiddique/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Running AI Agent Governance on AWS, No Azure Required]]></title>
            <link>https://medium.com/@isiddique/running-ai-agent-governance-on-aws-no-azure-required-59c92a3726f5?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/59c92a3726f5</guid>
            <category><![CDATA[agt]]></category>
            <category><![CDATA[agent-governance-toolkit]]></category>
            <category><![CDATA[gcp]]></category>
            <category><![CDATA[azure]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 04:41:20 GMT</pubDate>
            <atom:updated>2026-04-14T04:42:14.644Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mkHB-CTEqNBsIAoVWeNnxA.png" /></figure><p><em>How to deploy Microsoft’s Agent Governance Toolkit on ECS/Fargate and govern your Bedrock agents</em></p><p>I’m going to say something that might surprise you: <strong>Microsoft’s best open-source security toolkit runs perfectly on AWS.</strong> No Azure subscription. No vendor lock-in. Just pip install and go.</p><p>The <a href="https://github.com/microsoft/agent-governance-toolkit">Agent Governance Toolkit</a> (AGT) is an MIT-licensed runtime governance layer for AI agents. It intercepts every tool call, API request, and inter-agent message <em>before</em> execution — enforcing policies at sub-millisecond latency. It covers all 10 OWASP Agentic AI risks, and it works with <strong>LangChain</strong>, <strong>CrewAI</strong>, <strong>AutoGen</strong>, <strong>Bedrock </strong>agents, and anything else you’re building on AWS.</p><p>Here’s how to get it running on your AWS infrastructure in under 30 minutes.</p><h3>Why You Need This</h3><p>If you’re running AI agents on Bedrock, Lambda, or ECS, you probably already know the problem:</p><ul><li><strong>Unpredictable Tool Calls:</strong> Your agents can call tools or parameters you didn’t anticipate.</li><li><strong>Invisible Audit Trails:</strong> There’s no deterministic record of what actions agents took and why.</li><li><strong>Least-Privilege Enforcement:</strong> You can’t easily prove to your CISO that agents follow security best practices.</li><li><strong>Compliance Deadlines:</strong> The <strong>EU AI Act (August 2026)</strong> requires demonstrable human oversight and risk management for high-risk AI systems.</li></ul><p>AGT solves this by placing a deterministic safety kernel between agent “thought” and system “action.” Everything gets logged, dangerous actions get blocked, and your compliance team gets the evidence they need.</p><h3>Architecture</h3><pre>┌─────────────────────────────────────────────┐<br>│               Your AWS Account              │<br>│                                             │<br>│  ┌──────────┐    ┌──────────────────────┐   │<br>│  │ Bedrock  │───▶│  AGT Policy Engine   │   │<br>│  │ Agent    │    │  (ECS/Fargate)       │   │<br>│  └──────────┘    │                      │   │<br>│                  │  ✓ Policy check      │   │<br>│  ┌──────────┐    │  ✓ Identity verify   │   │<br>│  │ Lambda   │───▶│  ✓ Audit log         │   │<br>│  │ Agent    │    │  ✓ Rate limit        │   │<br>│  └──────────┘    └──────────┬───────────┘   │<br>│                             │               │<br>│                    ┌────────▼────────┐      │<br>│                    │  CloudWatch /   │      │<br>│                    │  S3 Audit Logs  │      │<br>│                    └─────────────────┘      │<br>└─────────────────────────────────────────────┘</pre><p><strong>Zero Azure dependencies. Pure Python containers.</strong></p><h3>Step 1: The 3-Line Quick Start</h3><p>Before we containerize, let’s prove it works locally:</p><pre>pip install agent-os-kernel</pre><pre>from agent_os.lite import govern<br><br># One line: define what&#39;s allowed and what&#39;s blocked<br>check = govern(<br>    allow=[&quot;web_search&quot;, &quot;read_file&quot;, &quot;query_database&quot;],<br>    deny=[&quot;execute_code&quot;, &quot;delete_file&quot;, &quot;ssh_connect&quot;],<br>)<br><br># One line: check any agent action<br>check(&quot;web_search&quot;)      # ✅ Allowed<br>check(&quot;execute_code&quot;)    # 💥 GovernanceViolation raised<br>check.is_allowed(&quot;delete_file&quot;)  # False (non-raising)</pre><p>That’s it. Three lines. Sub-millisecond. No complex YAML, no config files, no trust mesh. Just a fast allow/deny gate.</p><h3>Step 2: Create the Dockerfile</h3><pre>FROM python:3.12-slim<br><br>WORKDIR /app<br><br># Install AGT<br>RUN pip install --no-cache-dir agent-os-kernel[full]<br><br># Copy your policies and agent code<br>COPY policies/ ./policies/<br>COPY app.py .<br><br>CMD [&quot;python&quot;, &quot;app.py&quot;]</pre><h3>Step 3: Write Your Governed Agent</h3><p>Here’s a real agent wrapper that works with any Bedrock model:</p><pre># app.py — Governed agent on AWS<br>import json<br>import boto3<br>from agent_os.lite import govern<br><br># --- Governance setup ---<br>check = govern(<br>    allow=[&quot;invoke_model&quot;, &quot;read_s3&quot;, &quot;query_dynamodb&quot;, &quot;send_sns&quot;],<br>    deny=[&quot;delete_s3&quot;, &quot;modify_iam&quot;, &quot;execute_code&quot;, &quot;create_ec2&quot;],<br>    blocked_content=[<br>        r&#39;\b\d{3}-\d{2}-\d{4}\b&#39;,  # SSN<br>        r&#39;\b(?:\d[ -]*?){13,16}\b&#39;, # Credit cards<br>    ],<br>    max_calls=100,<br>    log=True,<br>)<br><br>bedrock = boto3.client(&quot;bedrock-runtime&quot;, region_name=&quot;us-east-1&quot;)<br><br>def governed_invoke(action: str, payload: dict) -&gt; dict:<br>    &quot;&quot;&quot;Every action goes through governance first.&quot;&quot;&quot;<br>    # Check the action<br>    check(action)<br><br>    # Check the content for PII<br>    content = json.dumps(payload)<br>    if not check.is_allowed(action, content=content):<br>        return {&quot;error&quot;: &quot;Blocked: content contains sensitive data&quot;}<br><br>    # Execute the actual action<br>    if action == &quot;invoke_model&quot;:<br>        response = bedrock.invoke_model(<br>            modelId=payload[&quot;model&quot;],<br>            body=json.dumps(payload[&quot;body&quot;]),<br>        )<br>        return json.loads(response[&quot;body&quot;].read())<br><br>    return {&quot;error&quot;: f&quot;Unknown action: {action}&quot;}<br><br># --- Your agent loop ---<br>if __name__ == &quot;__main__&quot;:<br>    # This will work<br>    result = governed_invoke(&quot;invoke_model&quot;, {<br>        &quot;model&quot;: &quot;anthropic.claude-sonnet-4-20250514&quot;,<br>        &quot;body&quot;: {&quot;prompt&quot;: &quot;Summarize Q4 earnings&quot;}<br>    })<br>    print(f&quot;✅ Model response received&quot;)<br><br>    # This will be blocked<br>    try:<br>        governed_invoke(&quot;delete_s3&quot;, {&quot;bucket&quot;: &quot;production-data&quot;})<br>    except Exception as e:<br>        print(f&quot;🚫 Blocked: {e}&quot;)<br><br>    # Print governance stats<br>    print(f&quot;\n📊 {json.dumps(check.stats, indent=2)}&quot;)</pre><h3>Step 4: Deploy to ECS/Fargate</h3><h4>Create the ECR repository and push:</h4><pre>aws ecr create-repository --repository-name agt-governed-agent<br>aws ecr get-login-password | docker login --username AWS --password-stdin $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com<br><br>docker build -t agt-governed-agent .<br>docker tag agt-governed-agent:latest $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/agt-governed-agent:latest<br>docker push $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/agt-governed-agent:latest</pre><h4>ECS Task Definition:</h4><pre>{<br>  &quot;family&quot;: &quot;agt-governed-agent&quot;,<br>  &quot;networkMode&quot;: &quot;awsvpc&quot;,<br>  &quot;requiresCompatibilities&quot;: [&quot;FARGATE&quot;],<br>  &quot;cpu&quot;: &quot;512&quot;,<br>  &quot;memory&quot;: &quot;1024&quot;,<br>  &quot;containerDefinitions&quot;: [<br>    {<br>      &quot;name&quot;: &quot;governed-agent&quot;,<br>      &quot;image&quot;: &quot;${ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/agt-governed-agent:latest&quot;,<br>      &quot;essential&quot;: true,<br>      &quot;environment&quot;: [<br>        {&quot;name&quot;: &quot;AWS_DEFAULT_REGION&quot;, &quot;value&quot;: &quot;us-east-1&quot;}<br>      ],<br>      &quot;logConfiguration&quot;: {<br>        &quot;logDriver&quot;: &quot;awslogs&quot;,<br>        &quot;options&quot;: {<br>          &quot;awslogs-group&quot;: &quot;/ecs/agt-governed-agent&quot;,<br>          &quot;awslogs-region&quot;: &quot;us-east-1&quot;,<br>          &quot;awslogs-stream-prefix&quot;: &quot;agt&quot;<br>        }<br>      }<br>    }<br>  ],<br>  &quot;executionRoleArn&quot;: &quot;arn:aws:iam::${ACCOUNT}:role/ecsTaskExecutionRole&quot;<br>}</pre><h4>Create the service:</h4><pre>aws ecs create-service \<br>  --cluster default \<br>  --service-name agt-governed-agent \<br>  --task-definition agt-governed-agent \<br>  --desired-count 1 \<br>  --launch-type FARGATE \<br>  --network-configuration &quot;awsvpcConfiguration={subnets=[subnet-xxx],securityGroups=[sg-xxx],assignPublicIp=ENABLED}&quot;</pre><p>Your governed agent is now running on AWS. Every action is policy-checked and audit-logged.</p><h3>Step 5: Production Policy (Optional Upgrade)</h3><p>When you outgrow the 3-line govern() call, AGT has production-ready policy files:</p><pre># Copy the enterprise policy template<br>cp examples/policies/production/enterprise.yaml policies/<br><br># Or for financial services:<br>cp examples/policies/production/financial.yaml policies/</pre><p>These include action rules, content filters (PII/PCI), escalation triggers, and retention settings — all in YAML. No OPA or Rego required unless you want it.</p><h3>Step 6: Ship Audit Logs to S3</h3><p>AGT’s audit trail integrates with CloudWatch. For compliance archival:</p><pre># Send governance stats to CloudWatch<br>import boto3<br><br>cloudwatch = boto3.client(&quot;cloudwatch&quot;)<br>stats = check.stats<br><br>cloudwatch.put_metric_data(<br>    Namespace=&quot;AGT/Governance&quot;,<br>    MetricData=[<br>        {&quot;MetricName&quot;: &quot;TotalDecisions&quot;, &quot;Value&quot;: stats[&quot;total&quot;], &quot;Unit&quot;: &quot;Count&quot;},<br>        {&quot;MetricName&quot;: &quot;Denied&quot;, &quot;Value&quot;: stats[&quot;denied&quot;], &quot;Unit&quot;: &quot;Count&quot;},<br>    ]<br>)</pre><h3>What You Get</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*61dW9pT_lLYxvOHFfpUaXg.png" /></figure><h3>FAQ</h3><p><strong>Q: Does this need Azure?</strong></p><p>No. Zero Azure dependencies. It’s a Python package that runs anywhere you can run Python.</p><p><strong>Q: Does it slow down my agents?</strong></p><p>No. Policy checks take 0.003ms on average. Your Bedrock API call takes 500–2000ms. The governance overhead is invisible.</p><p><strong>Q: Can I use this with LangChain on AWS?</strong></p><p>Yes. AGT works with LangChain, CrewAI, AutoGen, and any other Python agent framework.</p><p><strong>Q: What about the full AGT stack (trust mesh, SRE, etc.)?</strong></p><p>Start with agent_os.lite for basic governance. Add the full stack when you need cryptographic identity, lifecycle management, or execution sandboxing.</p><h3>Links</h3><ul><li><a href="https://github.com/microsoft/agent-governance-toolkit">Agent Governance Toolkit on GitHub</a></li><li><a href="https://github.com/microsoft/agent-governance-toolkit/blob/main/docs/deployment/aws-ecs.md">AWS Deployment Guide</a></li><li><a href="https://github.com/microsoft/agent-governance-toolkit/tree/main/examples/policies/production">Production Policy Library</a></li></ul><p><em>The Agent Governance Toolkit is MIT-licensed. Star it on GitHub if it’s useful to your team.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59c92a3726f5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Observability for Non-Deterministic Systems: A Framework for AI Agent Reliability]]></title>
            <link>https://medium.com/@isiddique/observability-for-non-deterministic-systems-a-framework-for-ai-agent-reliability-5a694fb1de70?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/5a694fb1de70</guid>
            <category><![CDATA[system-reliability]]></category>
            <category><![CDATA[llmops]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[observability]]></category>
            <category><![CDATA[ai-architecture]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Mon, 06 Apr 2026 15:54:22 GMT</pubDate>
            <atom:updated>2026-04-06T15:54:22.685Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bd086fRq4wFlQjxtk1U9CQ.png" /></figure><h3>The Observability Gap</h3><p>For fifty years, the observability stack has assumed determinism. Prometheus scrapes CPU utilization. Jaeger traces request latency. PagerDuty fires when error rates exceed thresholds. The mental model is mechanical: if the database is slow, queries are slow; if the server crashes, requests fail. The “Three Pillars”: metrics, logs, traces, capture the behavior of infrastructure.</p><p>This model works because deterministic systems have a knowable correct state. A 200 OK is correct. A 500 is not. The boundaries are crisp, and deviations are bugs.</p><h4>Why AI Agents Break This Model</h4><p>AI agents introduce properties that deterministic observability cannot capture:</p><ul><li><strong>Non-determinism:</strong> The same prompt produces different outputs on successive calls. Traditional monitoring treats variance as noise; in agent systems, variance <em>is</em> the signal.</li><li><strong>Semantic correctness:</strong> A 200 OK with a hallucinated answer is worse than a 500 error. HTTP status codes carry zero information about output quality. An agent that confidently produces wrong code or wrong medical advice is more dangerous than one that crashes.</li><li><strong>Progressive degradation:</strong> As context windows fill, LLM output quality degrades gradually, responses get shorter, less accurate, and more repetitive. This is <strong>Context Rot</strong>. There is no error. There is no crash. There is only a slow rot that traditional monitoring cannot see.</li></ul><h3>The “Laziness” Problem</h3><p>During my work observing coding agents at scale, I discovered a failure mode that no existing observability tool detected: <strong>agent laziness</strong>. The agent would produce syntactically valid but substantively empty responses, placeholder functions, TODO comments instead of implementations, or responses that technically answered the question while doing as little work as possible.</p><p>This is not a hallucination. It is not an error. It is a quality degradation that only becomes visible when you measure the gap between what was asked and what was delivered. This discovery led to the development of a <strong>Laziness Index</strong> that measures response length shrinkage, placeholder patterns, and delegation frequency. The metrics we were building for coding agents were actually capturing fundamental properties of human-agent collaboration.</p><h3>The Framework: Behavioral Observability</h3><p>Observability for non-deterministic systems requires a shift from <strong>infrastructure metrics</strong> to <strong>behavioral metrics</strong>. We must measure not what the system <em>is doing</em> (CPU, memory, latency) but what the system <em>is achieving</em> (correct outcomes, user satisfaction, progressive quality).</p><h4>Core Principle: The Human as Sensor</h4><p>In human-agent collaboration, the human’s behavior is the most reliable signal of agent quality. When a developer says “that’s wrong, fix it,” they are providing a ground-truth quality signal that no automated evaluation can match.</p><p>This is <strong>Correction-Based Observability</strong>: the systematic detection and scoring of human corrections to agent outputs as a proxy for output quality.</p><h4>Seven Behavioral Metrics</h4><ol><li><strong>Hallucination Index:</strong> Rate of human corrections to agent outputs.</li><li><strong>Laziness Index:</strong> Response quality degradation and effort avoidance.</li><li><strong>Context Rot Index:</strong> Quality degradation over session length.</li><li><strong>Flow Score:</strong> Consecutive productive interactions without correction.</li><li><strong>Loop Rate:</strong> Consecutive correction cycles without progress.</li><li><strong>Session Health:</strong> Three-tier classification (Clean, Bumpy, Troubled).</li><li><strong>Cost Per Outcome:</strong> Token spend divided by tangible deliverables.</li></ol><h3>Application Across High-Stakes Domains</h3><p>The correction-based observability pattern is universally applicable to any human-agent collaboration where the human can signal dissatisfaction.</p><h4>Healthcare: Clinical Decision Support</h4><p>A hallucinating coding agent produces a bug. A hallucinating clinical agent produces a misdiagnosis. In this domain, the framework uses tighter thresholds. A 15% hallucination rate in coding is a productivity issue; in healthcare, the threshold for a “Troubled” session is often a single override.</p><h4>Energy and Grid Management</h4><p>In energy systems, the consequences of errors manifest in physical system behavior. The observability layer tracks <strong>Physical Constraint Violation Rates</strong> — recommendations that violate thermal limits or voltage bounds — which are physically impossible “hallucinations.”</p><h4>Financial Services and Legal</h4><ul><li><strong>Finance:</strong> Measuring the <strong>Fair Lending Deviation Index</strong> to track if underwriter overrides vary by borrower demographics.</li><li><strong>Legal:</strong> Monitoring the <strong>Citation Hallucination Index</strong> to detect non-existent case law before it reaches a court filing.</li></ul><h3>Architecture: Privacy-First and Local-First</h3><p>Behavioral observability data is sensitive. A correction log reveals what an expert (a doctor, an attorney, an engineer) had to fix.</p><p>The proposed architecture for this framework is <strong>local-first</strong>: all computation happens on the practitioner’s machine. No raw sessions or corrections leave the device. Team-level aggregation uses anonymized identities and transmits only aggregate metrics. This removes the primary barrier to AI observability: the fear that the tool will expose individual performance rather than system reliability.</p><h3>Conclusion</h3><p>Non-deterministic observability is not a product; it is a discipline. As we scale agentic architectures, we must stop measuring what agents consume (tokens, latency) and start measuring what they achieve.</p><p>While the foundational primitives for agent tracking exist in the open-source <a href="https://github.com/microsoft/agent-governance-toolkit"><strong>Agent Governance Toolkit (AGT)</strong></a>, this behavioral framework represents a necessary evolution in how we ensure AI reliability at scale.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5a694fb1de70" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Securing AI agents with agent governance]]></title>
            <link>https://medium.com/data-science-at-microsoft/securing-ai-agents-with-agent-governance-767aacd2a927?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/767aacd2a927</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[agent-mesh]]></category>
            <category><![CDATA[ai-agent-governance]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Thu, 26 Mar 2026 07:16:00 GMT</pubDate>
            <atom:updated>2026-03-26T07:16:00.500Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*QduOOlJd1CBOo9WekNMRQg.png" /><figcaption>Photo by <a href="https://unsplash.com/@tekton_tools?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Tekton</a> on <a href="https://unsplash.com/photos/stainless-steel-tool-on-gray-sand-SVpCSOCcCwA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</figcaption></figure><p>Imagine this scenario: An AI agent is asked to “clean up old records,” and it interprets “old” as “everything older than today.” There is no policy engine to intercept the action, no approval workflow to pause and ask a human, and no kill switch to stop it mid-execution. The agent has been given unrestricted tool access — the equivalent of handing a new employee the root password on their first day and saying, “figure it out.”</p><p>This hypothetical illustrates a real and growing concern. As AI agents have evolved from simple chatbots into autonomous systems that book flights, execute trades, write code, and manage infrastructure, a gap has emerged: <strong>Many of the popular frameworks that power these agents focus on orchestration and have not yet built in runtime security governance.</strong> Frameworks like LangChain, AutoGen, and CrewAI do an excellent job of orchestrating agent behavior, but the industry as a whole is still developing answers to a fundamental question: <em>What happens when an agent does something it shouldn’t?</em></p><blockquote>Note: The Agent Governance Toolkit is currently available as a community preview release. All packages published to PyPI and npm are not official Microsoft-signed releases. Official signed packages via ESRP Release will be available in a future release. All security policy rules and detection patterns ship as configurable sample configurations that users must review and customize before production use.</blockquote><p>That question sent me down a path that eventually became the <a href="https://github.com/microsoft/agent-governance-toolkit">Agent Governance Toolkit</a> — an open-source framework, now released by Microsoft, that brings operating system-level security concepts to the world of AI agents. In this article, I walk through the problem we set out to solve, the architectural decisions that shaped our approach, and the technical details of how we built a system that enforces policy, verifies identity, isolates execution, and engineers reliability for autonomous AI agents.</p><h3>The problem: AI agents operate in a security vacuum</h3><p>To understand why agent governance matters, consider how a typical AI agent works today. A developer writes a prompt, connects a set of tools (database access, web browsing, file system operations), and hands control to an LLM. The agent reasons about what to do, selects tools, and executes actions — often in a loop, sometimes spawning sub-agents to handle subtasks.</p><p>The challenge is that <strong>in many current implementations, agent actions are unmediated.</strong> When an agent calls a tool, there is typically no security layer checking whether that call is within policy. There is often no identity verification when one agent communicates with another. There may be no resource limit preventing an agent from making 10,000 API calls in a minute. And there is frequently no circuit breaker to stop a failing agent from cascading failures across a system.</p><p>In February 2026, OWASP published the <strong>Agentic AI Top 10</strong> (see <a href="https://owasp.org/www-project-agentic-ai-threats">owasp.org/www-project-agentic-ai-threats</a>), the first formal taxonomy of risks specific to autonomous AI agents. The list highlights serious concerns for anyone running agents in production: goal hijacking through prompt injection, tool misuse, identity abuse, memory poisoning, cascading failures, and rogue agents. My team realized that addressing these risks required more than a guardrail library. It required a fundamentally new abstraction layer.</p><h3>The insight: What if we treated AI agents like processes?</h3><p>The key insight came from an analogy that now seems obvious in hindsight, because <strong>operating systems solved a similar problem decades ago.</strong></p><p>In the 1970s, when multi-user computing emerged, engineers faced a similar challenge: multiple untrusted programs sharing resources on a single machine. The solution they developed was the OS kernel — a privileged layer that mediates every interaction between a process and the outside world. Processes can’t directly access hardware; they make syscalls. They can’t read each other’s memory; they have isolated address spaces. They can’t consume unlimited resources; the scheduler enforces quotas.</p><p>So, we asked ourselves: What would an “operating system for AI agents” look like?</p><p>The answer became the four-layer architecture of the Agent Governance Toolkit:</p><ul><li><strong>Agent OS:</strong> The kernel. Every agent action passes through a policy engine before execution, just as every process action passes through the OS kernel via syscalls.</li><li><strong>AgentMesh:</strong> The identity layer. Agents have cryptographic identities (DIDs with Ed25519 key pairs) and must verify each other before communicating, similar to how mTLS works in service meshes.</li><li><strong>Agent Runtime:</strong> The isolation layer. Agents are assigned to execution rings based on their trust scores, with resource limits enforced per ring — inspired by CPU privilege rings.</li><li><strong>Agent SRE:</strong> The reliability layer. SLOs, error budgets, circuit breakers, and chaos testing — all the practices that keep distributed services reliable, applied to agent systems.</li></ul><h3>Under the hood: How policy enforcement actually works</h3><p>Let me show you what runtime policy enforcement looks like in practice, because it’s the piece that distinguishes this toolkit from existing approaches.</p><p>Most “guardrail” systems work by filtering inputs or outputs — they check the prompt before the LLM sees it, or they scan the response after the LLM generates it. The problem is that agent actions happen <em>between</em> those two points. An agent might receive a perfectly safe prompt, reason correctly about it, and then call a tool in a way that violates policy. Input/output filtering misses this entirely.</p><p>Agent OS intercepts at the action layer. When an agent calls a tool, the call passes through the policy engine before reaching the tool:</p><pre>from agent_os import StatelessKernel, ExecutionContext, Policy<br><br>kernel = StatelessKernel()<br><br># Define what this agent is allowed to do<br>ctx = ExecutionContext(<br>    agent_id=&quot;analyst-001&quot;,<br>    policies=[<br>        Policy.read_only(),                    # Default: no writes<br>        Policy.rate_limit(100, &quot;1m&quot;),          # Max 100 calls/minute<br>        Policy.require_approval(<br>            actions=[&quot;delete_*&quot;, &quot;write_production_*&quot;],<br>            min_approvals=2,<br>            approval_timeout_minutes=30,<br>        ),<br>    ],<br>)<br><br># This call gets intercepted by the policy engine<br>result = await kernel.execute(<br>    action=&quot;delete_user_record&quot;,<br>    params={&quot;user_id&quot;: 12345},<br>    context=ctx,<br>)<br># result.signal == &quot;ESCALATE&quot; → approval workflow initiated</pre><p>The key design decision here was to make the kernel <strong>stateless</strong>. Each request carries its own context — policies, history, identity — rather than storing state in the kernel. We chose this pattern because it enables horizontal scaling: You can run the kernel behind a load balancer, in a serverless function, or as a sidecar container, with no shared state to manage.</p><p>The policy engine itself has two layers. The first is configurable pattern matching with sample rule sets for detecting dangerous strings like “ignore previous instructions” or SQL injection patterns. The second is a semantic intent classifier that detects dangerous <em>goals</em> even when the exact phrasing does not match a pattern. When an agent’s action is classified as DESTRUCTIVE_DATA, DATA_EXFILTRATION, or PRIVILEGE_ESCALATION, the policy engine flags it for intervention regardless of how the request was worded.</p><h3>Zero-trust identity: TLS for AI agents</h3><p>When we started looking at multi-agent systems — scenarios where multiple agents collaborate on a task — the identity challenge became clear. In many frameworks, agents communicate as simple function calls. Agent A calls Agent B, and Agent B processes whatever it receives because identity verification has not yet been a standard feature of agent communication protocols.</p><p>AgentMesh introduces a protocol we call IATP — the Inter-Agent Trust Protocol. Think of it as TLS for AI agents: encryption, authentication, and authorization in one handshake.</p><p>Every agent gets a cryptographic DID (Decentralized Identifier) backed by an Ed25519 key pair:</p><pre>from agentmesh import AgentIdentity, TrustBridge<br><br># Create identity with a human sponsor for accountability<br>identity = AgentIdentity.create(<br>    name=&quot;data-analyst&quot;,<br>    sponsor=&quot;alice@company.com&quot;,<br>    capabilities=[&quot;read:data&quot;, &quot;write:reports&quot;],<br>)<br># identity.did → &quot;did:mesh:data-analyst:a7f3b2...&quot;<br><br># Before communicating, verify the peer<br>bridge = TrustBridge()<br>verification = await bridge.verify_peer(<br>    peer_id=&quot;did:mesh:other-agent&quot;,<br>    required_trust_score=700,  # Must score ≥700/1000<br>)<br><br>if verification.verified:<br>    await bridge.send_message(peer_id, encrypted_message)</pre><p>One design choice that proved critical was <strong>trust decay</strong>. An agent’s trust score isn’t static — it decays over time without positive signals. An agent that was trusted yesterday but has been silent for a week gradually becomes untrusted. This models reality: In the physical world, trust requires ongoing demonstration of good behavior, and our system reflects that.</p><p>Delegation chains solve another real-world problem: When an orchestrator agent delegates a task to a worker agent, the worker should have only the permissions needed for that specific task. AgentMesh enforces scope narrowing — a parent with read and write capabilities can delegate only read access to a child, and that child cannot re-delegate broader permissions than it received.</p><h3>Execution rings: Hardware security concepts for software agents</h3><p>The Agent Runtime borrows from CPU architecture. Intel processors have privilege rings (Ring 0 for the kernel, Ring 3 for user processes) that prevent unprivileged code from accessing protected resources. We applied the same concept to agents, but with a twist: <strong>Ring assignment is dynamic, based on behavioral trust scores.</strong></p><ul><li><strong>Ring 0 (Privileged):</strong> Trust score ≥ 0.95. Can modify system policies. Reserved for human-verified orchestrators.</li><li><strong>Ring 1 (Trusted):</strong> Trust score ≥ 0.80. Standard operations with full tool access.</li><li><strong>Ring 2 (Standard):</strong> Trust score ≥ 0.60. Limited resource access, rate-limited.</li><li><strong>Ring 3 (Sandbox):</strong> Trust score &lt; 0.60. Heavily restricted. New or untrusted agents start here.</li></ul><p>Each ring enforces resource limits: maximum execution time per step, memory caps, CPU throttling, and request rate limits. An agent in Ring 3 might be limited to 10 API calls per minute with a five-second execution timeout, while a Ring 0 agent has no such restrictions.</p><p>The runtime also provides saga orchestration for multi-step operations. When an agent executes a sequence of actions — draft an email, send it, update the CRM — and the final step fails, the saga engine automatically calls compensating actions in reverse order. The email gets recalled, the draft gets deleted. This pattern, borrowed from distributed transaction processing, prevents the partial-completion failures that plague agentic workflows.</p><h3>Reliability engineering for agents</h3><p>When we built the Agent SRE package, we started with a question: How do you define “reliable” for an AI agent? Traditional SRE metrics like uptime and latency matter, but agents introduce new dimensions. An agent might be fast and available but produce incorrect results. It might be accurate but cost $500 per hour in API calls. It might work perfectly in isolation but cause cascading failures when it interacts with other agents.</p><p>We defined seven Service Level Indicators (SLIs) specific to AI agents: correctness, safety, latency, cost, availability, throughput, and delegation success rate. Each SLI gets a threshold, and together they form an error budget — a quantified tolerance for failure.</p><p>Here’s where it gets interesting: The error budget drives automated remediation. When an agent’s safety SLI drops below 99 percent (meaning more than 1 percent of its actions violate policy), the system can automatically trigger a kill switch, downgrade the agent’s execution ring, or activate a circuit breaker that rejects new requests until the agent recovers.</p><p>We also built nine chaos engineering fault injection templates — network delays, LLM provider failures, tool timeouts, trust score manipulation, memory corruption, concurrent access races — because the only way to know if your agent system is resilient is to break it on purpose in controlled conditions.</p><h3>Covering the OWASP Agentic AI Top 10</h3><p>When OWASP published their Agentic AI Top 10, we mapped each risk to our toolkit’s capabilities and found that the architecture provides mitigations for all ten categories:</p><ul><li><strong>Goal hijacking</strong> is addressed by the policy engine’s semantic intent classifier.</li><li><strong>Tool misuse</strong> is mitigated by capability sandboxing and the MCP proxy.</li><li><strong>Identity abuse</strong> is addressed by DID-based identity and trust scoring.</li><li><strong>Supply chain risks</strong> are tracked by AI-BOM v2.0, which records model provenance, dataset lineage, and weight versioning.</li><li><strong>Code execution</strong> is constrained by execution rings and resource limits.</li><li><strong>Memory poisoning</strong> is detected by the Cross-Model Verification Kernel, which runs claims through multiple LLMs and uses majority voting to identify manipulation.</li><li><strong>Insecure communications</strong> are mitigated by the IATP protocol’s encryption layer.</li><li><strong>Cascading failures</strong> are addressed by circuit breakers and SLO enforcement.</li><li><strong>Human-agent trust exploitation</strong> is mitigated by approval workflows with quorum logic.</li><li><strong>Rogue agents</strong> are addressed by ring isolation, behavioral trust decay, and the kill switch.</li></ul><p>This alignment was by design, not by accident. The OS-inspired architecture creates defense in depth — multiple independent layers that each address different threat categories. No security system can guarantee absolute protection, but by layering complementary defenses, the toolkit significantly reduces the attack surface for autonomous AI agents.</p><h3>The interoperability challenge</h3><p>A governance toolkit is only useful if it works with the frameworks people actually use. We designed the toolkit to be framework-agnostic, with adapters that interoperate with LangChain, CrewAI, Google ADK, AutoGen, LlamaIndex, and others. Each adapter hooks into the framework’s native extension points — LangChain’s callback handlers, CrewAI’s task decorators, Google ADK’s plugin system — so that adding governance does not require rewriting existing agent code.</p><p>Several of these adapters are already working with production frameworks: Dify (65K+ GitHub stars) has the governance plugin in its marketplace, LlamaIndex (47K+ stars) has a TrustedAgentWorker, and proposals are active for AutoGen, CrewAI, Google ADK, and Haystack.</p><h3>What we learned</h3><p>Building this toolkit reinforced several lessons that apply beyond agent governance:</p><p><strong>Borrow from solved problems.</strong> The OS kernel, service mesh, and SRE playbook all addressed security and reliability challenges in other domains. Translating those patterns to AI agents was more effective than inventing from scratch.</p><p><strong>Make security the default, not an add-on.</strong> The reason we built governance into the execution path (intercepting actions) rather than as an optional wrapper is that optional security tends to go unadopted. If adding governance requires changing agent code, many teams will defer it. That said, no security layer is a silver bullet — defense in depth and ongoing monitoring remain essential.</p><p><strong>Trust is dynamic, not static.</strong> A binary trusted/untrusted model doesn’t capture reality. Trust scoring with behavioral decay and ring-based privilege assignment turned out to be a much better model for systems where agents are constantly changing.</p><p><strong>Statelessness enables everything.</strong> By making the kernel stateless, we got horizontal scaling, containerized deployment, and perfect auditability for free. Every decision we agonized over early in the architecture became easier once we committed to statelessness.</p><h3>Getting started</h3><p>The Agent Governance Toolkit is now open source under the MIT license at <a href="https://github.com/microsoft/agent-governance-toolkit">github.com/microsoft/agent-governance-toolkit</a>. You can install it with a single command:</p><pre>pip install ai-agent-compliance[full]</pre><p>This installs all four packages — Agent OS, AgentMesh, Agent Runtime, and Agent SRE — with version compatibility guaranteed. Individual packages are also available for teams that want to adopt governance incrementally.</p><p>The toolkit runs at sub-millisecond governance latency (&lt; 0.1ms p99), so it adds negligible overhead to agent execution. It exports metrics to OpenTelemetry-compatible platforms (Datadog, Prometheus, Grafana, Arize, Langfuse), and it works with Python 3.10+.</p><p>AI agents are becoming autonomous decision-makers in high-stakes domains — finance, healthcare, infrastructure, security. The question is not whether we need governance for these systems, but whether we will build it proactively, before incidents occur, or reactively, after them. We’ve chosen to be proactive. We hope you join us.</p><p><em>Imran Siddique is on </em><a href="https://www.linkedin.com/in/imransiddique1986/"><em>LinkedIn</em></a>.</p><p><em>The Agent Governance Toolkit is open source under the MIT license. Contributions welcome at github.com/microsoft/agent-governance-toolkit.</em></p><p><em>The author used AI-assisted tools during the drafting of this article. All technical content, code examples, and architectural descriptions reflect the actual capabilities of the Agent Governance Toolkit and have been reviewed for accuracy.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=767aacd2a927" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science-at-microsoft/securing-ai-agents-with-agent-governance-767aacd2a927">Securing AI agents with agent governance</a> was originally published in <a href="https://medium.com/data-science-at-microsoft">Data Science + AI at Microsoft</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OpenShell + Governance Toolkit: Engineering the Complete Agent Security Stack]]></title>
            <link>https://medium.com/@isiddique/openshell-governance-toolkit-engineering-the-complete-agent-security-stack-aab8d10ab8d3?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/aab8d10ab8d3</guid>
            <category><![CDATA[openclaw]]></category>
            <category><![CDATA[openshell]]></category>
            <category><![CDATA[agent-reliability]]></category>
            <category><![CDATA[ai-agent-governance]]></category>
            <category><![CDATA[agent-monitoring]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Wed, 18 Mar 2026 06:55:31 GMT</pubDate>
            <atom:updated>2026-03-18T06:55:31.408Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*muSfXXEieJDt3TLKvcZTcA.png" /></figure><p>Recent vulnerability disclosures by Cisco highlighted data exfiltration risks in third-party OpenClaw skills, reminding us that prompt injection remains a critical threat to multi-agent systems.</p><p>Solving this requires defense in depth. NVIDIA recently announced <strong>OpenShell</strong> at GTC — an open-source sandboxed runtime for AI agents. OpenShell provides incredible capabilities for filesystem, network, process, and inference controls.</p><p>However, runtime isolation alone cannot discern <em>intent</em> or <em>trust</em>. That is where the <a href="https://github.com/microsoft/agent-governance-toolkit"><strong>Agent Governance Toolkit</strong></a> comes in. By running the Governance Toolkit inside (or alongside) an OpenShell sandbox, we combine governance intelligence with strict execution boundaries.</p><p>We call this the <strong>“Walls + Brain” Architecture</strong>.</p><h3>The Capability Matrix: Walls vs. Brain</h3><p>OpenShell and the Agent Governance Toolkit solve fundamentally different halves of the agent security problem. They do not compete; they stack.</p><p><strong>OpenShell (The Walls) provides:</strong></p><ul><li>Container isolation (Docker/K3s)</li><li>Filesystem read/write policies</li><li>Network egress control (L7 proxy)</li><li>Process and syscall restrictions</li></ul><p><strong>The Governance Toolkit (The Brain) provides:</strong></p><ul><li>Agent Identity (Ed25519 cryptographic DIDs)</li><li>Behavioral trust scoring (5-dimension, 0–1000 scale)</li><li>Deterministic policy engines (YAML, OPA/Rego, Cedar)</li><li>Authority resolution and reputation-gated delegation</li><li>Tamper-evident Merkle audit chains</li></ul><p>OpenShell evaluates the environment: <em>“Is this network call allowed by the sandbox policy?”</em> The Governance Toolkit evaluates the actor: <em>“Should this specific agent be trusted to make this call at all?”</em></p><h3>The Request Flow: Defense in Depth</h3><p>In this integrated architecture, a single agent action (e.g., executing curl or writing to a file) must pass through two independent policy layers.</p><p><strong>Layer 1: The Governance Gate</strong></p><p>Before compute is initiated, the Governance sidecar evaluates the request. It verifies the agent’s cryptographic identity, checks if the dynamic trust score is above the required threshold, resolves delegated authority, and evaluates the intent against the declarative YAML/OPA policy. If approved, it commits the decision to the Merkle audit chain.</p><p><strong>Layer 2: The OpenShell Sandbox</strong></p><p>Once governance approves the action, OpenShell enforces the physical runtime constraints. It ensures the process does not violate syscall restrictions and that the network egress proxy allows the specific host connection.</p><p>If <em>either</em> layer denies the action, execution is hard-blocked.</p><h3>Policy Layering in Action</h3><p>Here is what this looks like when an agent attempts to POST to a cloud metadata endpoint (169.254.169.254/metadata) due to a hallucination or prompt injection:</p><ol><li><strong>Layer 1 (Governance):</strong> The policy engine evaluates the request context. The policy explicitly blocks http:*:169.254.169.254/*.</li><li><strong>Result:</strong> The action is deterministically DENIED and logged with the violation reason. The agent&#39;s trust score is slashed.</li><li><strong>Execution:</strong> The payload never reaches the OpenShell runtime.</li></ol><p>Conversely, if the agent makes a legitimate request to api.github.com/repos/org/repo/issues:</p><ol><li><strong>Layer 1 (Governance):</strong> Identity verified (did:mesh:a1b2c3). Trust score is 0.82 (above the 0.5 threshold). Authority is confirmed as delegated by the parent agent. → ALLOW.</li><li><strong>Layer 2 (OpenShell):</strong> The network policy explicitly permits outbound POST traffic to api.github.com. The process policy permits the curl binary. → ALLOW.</li><li><strong>Execution:</strong> The action safely executes.</li></ol><h3>Deployment Topologies</h3><p>The integration supports flexible deployment models depending on your infrastructure:</p><ul><li><strong>Option A (Governance Skill):</strong> The toolkit is installed as an OpenClaw skill inside the sandbox. The agent natively invokes the validation scripts (check-policy.sh, verify-identity.sh) before taking action. (Note: We have just updated all 6 OpenClaw scripts to v1.1.0 to support the latest AgentMesh API).</li><li><strong>Option B (Governance Sidecar):</strong> For production, the toolkit runs as a sidecar proxy intercepting all tool calls on port 8081. OpenShell’s network policies are configured to block all outbound traffic <em>except</em> to the governance sidecar and approved LLM endpoints.</li></ul><h3>Unified Observability</h3><p>Running both layers generates two complementary telemetry streams. OpenShell emits physical logs (network egress, filesystem access, process execution), while the Governance sidecar emits behavioral metrics (policy_decisions_total, trust_score_current, authority_resolutions_total).</p><p>Because the toolkit natively exports via Prometheus/OpenTelemetry, both streams can be fed into a single Grafana dashboard, allowing Site Reliability Engineers to monitor both the physical sandbox and the agent’s trust economy simultaneously.</p><p><strong>Getting Started</strong></p><p>We have published the full architecture, sidecar setup options, and policy layering examples in our new integration guide (docs/integrations/openshell.md).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aab8d10ab8d3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Running 11 AI Agents in Production: How the Agent Governance Toolkit Secures Our Workflows]]></title>
            <link>https://medium.com/@isiddique/running-11-ai-agents-in-production-how-the-agent-governance-toolkit-secures-our-workflows-10a6399638fc?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/10a6399638fc</guid>
            <category><![CDATA[ai-governance]]></category>
            <category><![CDATA[agentos]]></category>
            <category><![CDATA[agent-mesh]]></category>
            <category><![CDATA[devsecops]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Thu, 12 Mar 2026 20:34:16 GMT</pubDate>
            <atom:updated>2026-03-12T20:34:16.736Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EgWHAU4pfaBCxenKUzg1ow.png" /></figure><p>Everyone is building AI agents. Frameworks like LangChain, AutoGen, CrewAI, and the OpenAI Agents SDK are everywhere. But after deploying my first multi-agent system, I noticed a fundamental architectural gap: none of these frameworks answer the hard question.</p><p><strong><em>What strictly stops an agent from doing something it shouldn’t?</em></strong></p><p>I run the AI Native Team inside Microsoft. We build and ship AI-first tooling across our pipelines: code review, security scanning, spec drafting, test generation, and infrastructure validation. At any given moment, 11 specialized agents are running concurrently against our production repositories, making real decisions about real code.</p><p>That is 11 autonomous agents with access to tools, files, and APIs. Without governance, that is 11 distinct attack surfaces.</p><h3>Enter the Agent Governance Toolkit</h3><p>The <strong>Agent Governance Toolkit</strong> (<a href="https://github.com/microsoft/agent-governance-toolkit">microsoft/agent-governance-toolkit</a>) is an open-source middleware layer that sits between your agents and their execution environments. It is not another agent framework—it is a security kernel.</p><p>Every tool call, output, and agent-to-agent interaction passes through a deterministic policy engine before it executes.</p><p>Here is what the execution pipeline looks like:</p><blockquote>Agent Request → Trust Check → Governance Gate → Reliability Gate → Execute → Output Check → Audit Log</blockquote><p>The key engineering insight here is that <strong>safety decisions must be deterministic, not prompt-based.</strong> The policy engine uses strict pattern matching, capability models, and budget tracking. There is no LLM involved in the safety layer, meaning zero hallucination risk and sub-millisecond enforcement.</p><h3>Real Numbers from a Production Instance</h3><p>Here is the telemetry from our production daemon, recorded over an 11-day continuous uptime window:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/708/1*7BniFjJNcRIRtshbHacuYQ.png" /></figure><p>Those 473 denials represent 473 times an agent tried to execute an unauthorized action and was hard-blocked. This includes token budget overflows, destructive shell patterns (rm -rf), SQL injection patterns (DROP TABLE), and tool call limit violations. Every single incident was caught deterministically and logged in under 8 milliseconds.</p><h3>The Architectural Flaw in Prompt-Based Governance</h3><p>When we evaluated our governance options, we looked heavily at prompt-based approaches like OpenClaw.</p><p>The fundamental problem with prompt-based governance is the recursive trust issue: <strong>You are using an LLM to decide whether an LLM should be allowed to do something.</strong> Here is how deterministic kernel-level governance compares to prompt-based safety:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/724/1*7ifW3No2kxEFRTAXKIq61A.png" /></figure><p>The latency difference alone dictates the architecture. Evaluating 7,000+ decisions across 11 agents with a 500ms LLM penalty would add nearly an hour of pure overhead. Our deterministic approach added exactly 0.43 seconds of total overhead across the entire 11 days.</p><h3>Snapshots: Governance in Action</h3><p>Because the governance is deterministic, the telemetry is incredibly clear. Here is what a live, healthy session looks like in our logs:</p><pre>2026-03-11 21:43:01 [GOVERNANCE] security-scanner → execute_task → ALLOW (0.377ms)<br>2026-03-11 21:43:34 [GOVERNANCE] code-reviewer → output_check → ALLOW (0.442ms)<br>2026-03-11 22:19:43 [GOVERNANCE] spec-drafter → execute_task → ALLOW (3.970ms)</pre><p>And here is what happens when a boundary is hit:</p><pre>2026-03-08 14:22:11 [GOVERNANCE] agent-42 → execute_task → DENY: Blocked pattern: rm -rf (0.12ms)<br>2026-03-09 09:15:33 [GOVERNANCE] researcher → execute_task → DENY: Token budget exceeded: 200/100 (0.08ms)<br>2026-03-10 16:44:02 [GOVERNANCE] agent-17 → execute_task → DENY: Tool call limit exceeded: 10/5 (0.05ms)</pre><h3>Configuration as Code</h3><p>We do not run separate infrastructure for this. The entire governance policy fits in a YAML block inside our daemon config:</p><pre>governance:<br>  enabled: true<br>  max_tokens_per_task: 8000<br>  max_tool_calls_per_task: 20<br>  max_files_changed: 15<br>  blocked_patterns:<br>    - &quot;rm -rf /&quot;<br>    - &quot;DROP TABLE&quot;<br>    - &quot;DELETE FROM&quot;<br>  policy_mode: strict   # strict | permissive | audit</pre><p>We utilize strict mode in production to hard-block violations, and audit mode in development to tune policies by logging intent without halting execution.</p><h3>The Three-Gate Architecture</h3><p>Robust infrastructure requires defense in depth. Governance here is not a single if/else statement; it is three independent execution gates:</p><ul><li><strong>GovernanceGate (Policy):</strong> Enforces blocked patterns, token budgets, and scope guards using the Agent-OS kernel.</li><li><strong>TrustGate (Identity):</strong> Each agent earns or loses trust based on compliance history. Built on AgentMesh’s 0–1000 trust scale, misbehaving agents are mathematically demoted.</li><li><strong>ReliabilityGate (SRE):</strong> Circuit breakers and SLO enforcement. If an agent’s error rate spikes, the circuit breaker trips and blocks further execution, powered by Agent SRE.</li></ul><p>All three gates must pass. A highly trusted agent can still be denied by a policy limit. A policy-compliant agent can still be blocked by a tripped circuit breaker.</p><h3>The Engineering Impact</h3><p>The feeling of running with a deterministic safety net is profound. It changes how you build.</p><ul><li><strong>We ship faster.</strong> With strict guardrails, we trust agents to operate with far more autonomy.</li><li><strong>We sleep better.</strong> Our daemon runs 24/7. The audit log tells us exactly what happened, when, and why. There are no black boxes.</li><li><strong>Compliance by default.</strong> We have deterministic coverage for the OWASP Agentic Top 10. When security review asks how we govern our agents, we simply hand them the YAML config and the audit logs.</li></ul><p>It is the exact difference between driving a mountain road without guardrails, and driving it with them. You can still drive fast; you just can’t drive off the cliff.</p><h3>Try It Yourself</h3><p>If you are running agents in production, wrap them in a safety kernel.</p><pre>pip install ai-agent-compliance[full]</pre><p>It takes one install to get the full governance stack. Wrap your existing agents — whether built on LangChain, AutoGen, CrewAI, or Swarm — and every action will route through the policy engine.</p><p>The Agent Governance Toolkit is open-source (MIT licensed) and available here: <a href="https://github.com/microsoft/agent-governance-toolkit">github.com/microsoft/agent-governance-toolkit</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10a6399638fc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Engineering the Agent Hypervisor: OS Primitives for Multi-Agent Systems]]></title>
            <link>https://medium.com/@isiddique/engineering-the-agent-hypervisor-os-primitives-for-multi-agent-systems-9c9de6bdadf6?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c9de6bdadf6</guid>
            <category><![CDATA[agent-hypervisor]]></category>
            <category><![CDATA[ai-architecture]]></category>
            <category><![CDATA[agentos]]></category>
            <category><![CDATA[agent-mesh]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Tue, 03 Mar 2026 00:53:02 GMT</pubDate>
            <atom:updated>2026-03-03T00:53:02.635Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XuBu33nLGFHXDbXD" /></figure><p>Most of the discussion around “AI Safety” focuses on the model: red-teaming, alignment, and prompt injection. But as we build systems where dozens of autonomous agents interact, the problem shifts from model safety to system architecture.</p><p>In a multi-agent architecture, agents are effectively distributed microservices. However, unlike traditional microservices, which are governed by service meshes, mTLS, and strict IAM policies, agents currently operate in a state of implicit trust. If the “Summarizer Agent” receives a payload from the “Database Agent,” it blindly executes it.</p><p>To solve this, we cannot just add more system prompts. We need an operating system layer. Today, we are releasing the Agent Hypervisor within Agent-OS: a runtime supervisor that enforces strict execution boundaries for interacting agents.</p><p>Here is a technical breakdown of the core modules we implemented.</p><h3>1. Execution Rings (hypervisor.rings)</h3><p>Drawing inspiration from x86 protection rings, the hypervisor implements strict privilege separation for agents.</p><ul><li><strong>Ring 0 (Kernel):</strong> Reserved for highly trusted agents interacting with critical infrastructure (e.g., modifying IAM policies, executing raw SQL).</li><li><strong>Ring 3 (User Space): </strong>Reserved for public-facing or third-party agents.</li></ul><h3>2. Joint Liability and Vouching (hypervisor.liability)</h3><p>In a chain of agents, blame assignment is notoriously difficult. If Agent C executes a destructive action based on data from Agent A, who is penalized?</p><p>We introduced a cryptographic “Vouching” mechanism. When agents hand off tasks, they must sign the payload, accepting a degree of joint liability. If an anomaly is detected downstream, the slashing module automatically degrades the trust score of every agent in the vouching chain. This forces multi-agent systems into a state of defensive verification-agents will refuse payloads from peers with low trust scores.</p><h3>3. Distributed Rollbacks via Sagas (hypervisor.saga)</h3><p>When a multi-step agent workflow fails, you cannot simply drop the connection. State has likely been mutated.</p><p>Rather than relying on the LLM to figure out how to undo its mistakes, the Hypervisor implements the Saga pattern. It maintains an append-only state_machine of all side-effects. If an execution graph fails, the orchestrator steps in and sequentially triggers predefined compensating transactions (via the reversibility.registry) to restore the system to a clean state.</p><h3>4. Shared Session Context (hypervisor.session)</h3><p>Passing context windows between multiple agents is expensive and insecure. We implemented a Multi-Agent SSO (Single Sign-On). Agents join a verified “Session.” The hypervisor manages the shared memory and state commitments centrally, drastically reducing token overhead while maintaining a forensic, append-only audit trail (audit.commitment and audit.delta).</p><h3>Performance Constraints</h3><p>Adding a governance layer is useless if it creates an unacceptable bottleneck. The Hypervisor was written to be as close to the metal as possible in Python. According to our latest benchmark suite (bench_hypervisor.py), core ring computations execute at a mean latency of 0.3μs. It secures the execution graph without impacting the critical path of the application.</p><h3>The Path Forward</h3><p>We are moving past the era of “prompt engineering for safety” and into the era of <strong>Agentic Systems Engineering</strong>. By treating agents as untrusted compute nodes that require an OS-level hypervisor, we can build enterprise systems that fail gracefully and deterministically.</p><p>The complete implementation, along with the integrations for our CMVK (Cross-Model Verification Kernel) and IATP adapters, is available in the Agent-OS repository.</p><p><em>Originally published at </em><a href="https://www.linkedin.com/pulse/engineering-agent-hypervisor-os-primitives-systems-imran-siddique-z12tc/?trackingId=Xfk99uAKuwld60ROzKrpGw%3D%3D"><em>https://www.linkedin.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c9de6bdadf6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Architect’s Dilemma: Skills, Agents, or an Operating System?]]></title>
            <link>https://medium.com/@isiddique/the-architects-dilemma-skills-agents-or-an-operating-system-50aadbba811f?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/50aadbba811f</guid>
            <category><![CDATA[sre-agent]]></category>
            <category><![CDATA[agent-hypervisor]]></category>
            <category><![CDATA[agentos]]></category>
            <category><![CDATA[agent-mesh]]></category>
            <category><![CDATA[ai-architecture]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Tue, 03 Mar 2026 00:48:25 GMT</pubDate>
            <atom:updated>2026-03-03T00:48:25.882Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*74tLaN0K2N9BOgBy" /></figure><p>In the rush to “<strong>agentize</strong>” everything, we’ve hit a structural wall. Most enterprise AI today is just a collection of “skills”, fancy prompt-wrappers that execute narrow tasks. On the other end, we have the “autonomous agents” promised by research papers that often hallucinate their way into a loop.</p><p>As someone who has spent years architecting systems, from heavy-duty backends to the front lines of the AI agent revolution, I’ve seen this pattern before. It’s the classic evolution from <strong>Scripts </strong>to <strong>Microservices </strong>to <strong>Cloud OS</strong>.</p><p>Below is a deep architectural comparison of the three paradigms: <strong>Skills-Based Execution, A2A (Agent-to-Agent) Protocols</strong>, and the emerging <strong>Agent OS/Mesh</strong> layer.</p><h3>1. Skills: The “Monolithic Wrapper”</h3><p>Most “agents” built today are actually <strong>Skill-based</strong>. You have one brain (the LLM) and a tool-belt.</p><ul><li><strong>Where it makes sense: </strong>When the task is linear. If you need to “Summarize this PDF and email it,” you don’t need a multi-agent swarm. You need a skill.</li><li><strong>Where it fails: </strong>Context bloat. As you add more skills, the prompt grows, the token cost spikes, and the model starts getting “confused” by the sheer number of tool definitions.</li></ul><h3>2. A2A (Agent-to-Agent): The “Microservices” of AI</h3><p>This is where decentralized communication protocols sit. It treats agents as independent actors that pass messages.</p><ul><li><strong>Where it makes sense:</strong> Specialized domains. You have a “SQL Agent,” a “Legal Agent,” and a “Creative Agent.” They talk to each other to solve a complex problem.</li><li><strong>The Problem: </strong>It’s messy. Without a centralized “OS,” these agents often get into infinite loops or lose track of the “source of truth.” It’s like running 50 microservices without Kubernetes.</li><li><strong>The Path Forward:</strong> We need standardized communication to make this work at scale. I’ve proposed a <a href="https://github.com/a2aproject/A2A/pull/1455">unified agent communication layer </a>to bridge this gap, ensuring that as agents talk, they do so within a governed framework.</li></ul><h3>3. Agent OS &amp; Agent Mesh: The “Scale by Subtraction” Path</h3><p>This is the perspective I’ve been building toward with the <strong>Agent OS</strong> and <strong>Agent Mesh </strong>projects. Instead of just adding more agents or better prompts, we introduce a <strong>Kernel</strong>.</p><ul><li><strong>The Agent OS (Kernel):</strong> It acts as the “Control Plane.” It enforces deterministic governance. If an agent tries to execute a “reversible” vs. “irreversible” action (like deleting a database), the Kernel intercepts it based on a <strong>Trust Protocol</strong>.</li><li><strong>The Agent Mesh: </strong>Think of this as a <strong>Service Mesh for AI</strong>. It uses a “Sidecar” pattern. The agent doesn’t need to know how to handle security or long-term memory; the Mesh handles that via the sidecar, leaving the agent to focus purely on the logic.</li><li><strong>Integration Strategy: </strong>To make this a reality, we must integrate these orchestration capabilities directly into the data and framework layers. For example, my work on <a href="https://github.com/run-llama/llama_index/pull/20644">introducing orchestration primitives in LlamaIndex</a> is designed to give the “Data Layer” the “OS” capabilities it needs to manage complex agent states.</li></ul><h3>Scenarios: When to Use What?</h3><h4>Scenario A: The Executive Assistant (Skills)</h4><p>You need to book meetings and read emails.</p><ul><li><strong>Verdict</strong>: <strong>Skills</strong>. Keep it simple. A single agent with access to Outlook and Calendar APIs is faster and cheaper.</li></ul><h4>Scenario B: Cross-Department Procurement (A2A)</h4><p>Legal needs to review a contract, Finance needs to check the budget, and Procurement needs to cut the PO.</p><ul><li><strong>Verdict</strong>: <strong>A2A</strong>. These are distinct roles with different data permissions. A2A protocols allow them to hand off the “baton” without sharing the entire context window.</li></ul><h4>Scenario C: Autonomous Cloud Operations (Agent OS/Mesh)</h4><p>A system that monitors telemetry and automatically scales or patches services in production.</p><ul><li><strong>Verdict</strong>: <strong>Agent OS</strong>. You cannot leave this to probabilistic LLM logic. You need a <strong>Self-Correcting Kernel</strong> that verifies every action against a verification primitive before it hits the infrastructure.</li></ul><h3>The Convergence: Will Agent OS eat A2A and LlamaIndex?</h3><p>In the long run, I believe <strong>Agent OS and Agent Mesh will eventually converge with frameworks like LlamaIndex and A2A protocols</strong>.</p><p>Right now, LlamaIndex is the “Data Layer” and A2A is the “Transport Layer.” But they are missing the <strong>Operating System Layer</strong>. Eventually, LlamaIndex will become a specialized “Storage Driver” within an Agent OS, and A2A will be the “Network Protocol” that the Agent Mesh uses to route traffic.</p><p>We are moving away from “Agent as a Program” toward “<strong>Agent as a Process.</strong>” And just like any process, it needs an OS to manage its memory, its permissions, and its life cycle.</p><blockquote><em>Key Takeaway: Stop building bigger agents. Start building a better kernel. Scale by subtraction, remove the coordination logic from the agent and move it into the Mesh.</em></blockquote><p><em>Originally published at </em><a href="https://www.linkedin.com/pulse/architects-dilemma-skills-agents-operating-system-imran-siddique-otadc/?trackingId=%2B6uYaIouHYzP1UkL5rtwBA%3D%3D"><em>https://www.linkedin.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=50aadbba811f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Engineering Safety: A Layered Governance Architecture for GitHub]]></title>
            <link>https://medium.com/@isiddique/engineering-safety-a-layered-governance-architecture-for-github-bb56d985c798?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/bb56d985c798</guid>
            <category><![CDATA[ai-safety]]></category>
            <category><![CDATA[github-copilot]]></category>
            <category><![CDATA[aiguardrails]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[agentos]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 05:52:39 GMT</pubDate>
            <atom:updated>2026-02-19T05:52:39.927Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_EIxda3QxBR0PgHtzpKymA.png" /></figure><p>Building safe AI agents requires more than just a good system prompt. It requires infrastructure that enforces constraints at every stage of the development lifecycle.</p><p>This week, we merged three contributions into the <a href="https://github.com/github/awesome-copilot">github/awesome-copilot</a> repository (#<a href="https://github.com/github/awesome-copilot/pull/755">755</a>, #<a href="https://github.com/github/awesome-copilot/pull/756">756</a>, #<a href="https://github.com/github/awesome-copilot/pull/757">757</a>). Together, they implement a <strong>layered governance architecture</strong> designed to help developers build secure agentic workflows by default.</p><p>Here is the technical breakdown of the implementation.</p><h3>Layer 1: Pre-Computation Safety (The Hook)</h3><h4><strong>Component:</strong> governance-audit</h4><p>We implemented a client-side hook that intercepts userPromptSubmitted events. This is a shell-based scanner that analyzes prompts against a regex library of known threat signatures before the request leaves the developer&#39;s machine.</p><ul><li><strong>Threat Categorization:</strong> We classify signals into 5 buckets: data_exfiltration (&quot;curl -d&quot;), privilege_escalation (&quot;chmod 777&quot;), system_destruction (&quot;rm -rf&quot;), prompt_injection, and credential_exposure.</li><li><strong>Local Execution:</strong> Privacy was a strict constraint. The scanning logic (audit-prompt.sh) runs entirely locally, ensuring no prompt data is sent to a third-party logger.</li><li><strong>Configurable Severity:</strong> The hook supports four governance levels (open, standard, strict, locked), allowing teams to balance friction vs. safety.</li></ul><p>This layer prevents “accidental” unsafe code generation by catching intent before it reaches the model.</p><h3>Layer 2: In-Context Pattern Matching (The Skill)</h3><h4><strong>Component:</strong> agent-governance</h4><p>To generate secure code, the model needs to understand valid security patterns. We added a skill definition that injects specific governance context into Copilot&#39;s retrieval path.</p><p>Key patterns covered:</p><ul><li><strong>Policy-as-Code:</strong> Standardizing on declarative YAML for allowlists/blocklists rather than hardcoding logic.</li><li><strong>Trust Scoring:</strong> Implementing decay-based trust models for multi-agent delegation. (e.g., If Agent A fails a task, its score degrades; if it succeeds, it increments).</li><li><strong>Auditability:</strong> Enforcing append-only logging for all tool invocations.</li></ul><p>By formalizing these as a “Skill,” we ensure Copilot retrieves high-quality examples for PydanticAI and CrewAI rather than hallucinating insecure implementations.</p><h3>Layer 3: Post-Generation Verification (The Agent)</h3><h4><strong>Component:</strong> agent-governance-reviewer</h4><p>The final layer is verification. We introduced a specialized Copilot agent (agents/agent-governance-reviewer.agent.md) configured to act as a security linter.</p><p>Unlike a standard linter, this agent reviews semantic safety:</p><ul><li><strong>Decorator Audits:</strong> Checks if sensitive tools are wrapped with the @govern decorator.</li><li><strong>Secret Detection:</strong> Scans for hardcoded secrets in agent configuration blocks.</li><li><strong>Trust Boundary Analysis:</strong> Verifies that multi-agent handoffs include explicit identity verification steps.</li></ul><h3>Conclusion</h3><p>This work represents a shift from “ad-hoc” safety to <strong>structural</strong> safety. By embedding these patterns directly into the developer’s IDE via the <a href="https://github.com/github/awesome-copilot/">awesome-copilot</a> standard, we reduce the friction of implementing robust governance.</p><p>This aligns with our broader work on <a href="https://github.com/imran-siddique/agent-os"><strong>Agent-OS</strong></a>, creating a standardized control plane for autonomous systems.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bb56d985c798" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Your AI Agents Need Passports: Building Cryptographic Trust into Dify’s Visual Workflows]]></title>
            <link>https://medium.com/@isiddique/why-your-ai-agents-need-passports-building-cryptographic-trust-into-difys-visual-workflows-1081015063ea?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/1081015063ea</guid>
            <category><![CDATA[ai-governance]]></category>
            <category><![CDATA[dify]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[trust-layer]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Tue, 17 Feb 2026 19:49:26 GMT</pubDate>
            <atom:updated>2026-02-17T19:49:43.365Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i7zTUbxvubHpOk5P0uhOXA.png" /></figure><p><em>Our AgentMesh Trust Layer was just merged into the Dify Marketplace. Here is what we built, why dynamic trust scoring changes everything, and what it looks like when governance becomes visible.</em></p><h3>The Problem Nobody Talks About</h3><p>Here is a question most multi-agent teams skip: <strong>When Agent A passes data to Agent B, how do you know Agent B is who it claims to be?</strong></p><p>In traditional microservices, we solved this decades ago using mTLS, service mesh certificates, and RBAC. Yet, in the AI agent world, we have regressed to simply trusting the system. If Agent B claims to be the summarizer, it is blindly handed customer data.</p><p>This is the exact gap we closed in Dify with the AgentMesh Trust Layer plugin (<a href="https://github.com/langgenius/dify-plugins/pull/2060">merged via PR #2060</a>).</p><h3>The Four Pillars of the Trust Layer</h3><p>The plugin introduces four specific tools that operate directly as nodes on Dify’s visual workflow canvas:</p><p><strong>1. </strong><strong>get_identity — Issue an Agent Passport:</strong> Every agent receives an Ed25519 cryptographic identity—a Decentralized Identifier (DID) backed by a public/private keypair. This is a cryptographically verifiable credential, not just a string label.</p><p><strong>2. </strong><strong>verify_peer — Check Who You Are Talking To:</strong> Before trusting data, this node verifies the peer&#39;s Ed25519 signature, validates the DID, and confirms the required capabilities. If verification fails, the workflow deterministically stops.</p><p><strong>3. </strong><strong>verify_step — Gate Nodes by Capability:</strong> Drop this node before any sensitive operation to check if an agent is authorized. You can literally see the governance gate on the Dify canvas explicitly blocking unauthorized paths.</p><p><strong>4. </strong><strong>record_interaction — The Trust Economy:</strong> Every agent starts with a neutral trust score of 0.5. Successes increase the score by +0.01, while failures drop it by a configured severity. If a hallucinating agent&#39;s score drops below 0.5, it is automatically quarantined by mathematics.</p><h3>The Trust Stack: Two Levels of Scoring</h3><p>The Dify plugin implements a simplified trust model designed for single-instance workflows, serving as an on-ramp to the full AgentMesh engine:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/1*-1Il7iMKOhrgxnFPc2nyTA.png" /></figure><h3>Why Visual Governance Matters</h3><p>Dify’s visual canvas makes governance tangible. In code-only frameworks, governance is middleware that logs in the background. In Dify, a verify_step node sits visibly between an LLM call and tool execution. Security teams can open the workflow and instantly understand the safety architecture without reading a single line of code.</p><h3>The Bigger Picture</h3><p>This merge is part of a broader push to make governance a default layer across the entire AI ecosystem:</p><ul><li><strong>✅ Merged:</strong> Dify, LlamaIndex, Microsoft Agent-Lightning.</li><li><strong>🔄 Open Proposals:</strong> CrewAI, AutoGen, LangGraph, Google ADK, Semantic Kernel, and more.</li></ul><p>Governance should not be a separate product bolted onto a system; it should be a first-class middleware node in every framework.</p><h3>Try It</h3><ul><li><strong>Install:</strong> Search “AgentMesh Trust Layer” in the Dify plugin marketplace.</li><li><strong>Source Code:</strong> Available on GitHub at <a href="https://github.com/imran-siddique/agent-mesh">imran-siddique/agent-mesh</a>.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1081015063ea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The End of Implicit Trust: Bringing Cryptographic Identity to LlamaIndex Agents]]></title>
            <link>https://medium.com/@isiddique/the-end-of-implicit-trust-bringing-cryptographic-identity-to-llamaindex-agents-9d98361f073e?source=rss-fc2c693dc406------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d98361f073e</guid>
            <category><![CDATA[agent-mesh]]></category>
            <category><![CDATA[llamaindex]]></category>
            <category><![CDATA[enterprise-ai]]></category>
            <category><![CDATA[ai-crypto]]></category>
            <category><![CDATA[ai-security]]></category>
            <dc:creator><![CDATA[Imran Siddique]]></dc:creator>
            <pubDate>Thu, 12 Feb 2026 21:10:46 GMT</pubDate>
            <atom:updated>2026-02-12T21:10:46.376Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E3aYJv_YVbvBig3okXxcPQ.png" /></figure><p>In a production environment — especially in finance, healthcare, or enterprise data — allowing an LLM to blindly accept context from another agent is a security vulnerability.</p><p>“Implicit trust” (where Agent A assumes Agent B is friendly because they share a runtime) is no longer sufficient.</p><p>Today, we are announcing the <strong>Agent Mesh integration (llama-index-agent-agentmesh)</strong>. This is a fundamental hardening of the agentic stack, moving from “experimental swarms” to governed, identity-backed meshes.</p><h3><strong>The Core Shift: Identity vs. Credentials</strong></h3><p>Most agent frameworks treat identity as a static string. We are taking a different approach by separating <strong>Who you are</strong> from <strong>Your right to act</strong>.</p><p>With this integration, we are introducing a dual-layer security model:</p><ol><li><strong>Persistent Identity:</strong> The CMVKIdentity acts as the agent&#39;s permanent, cryptographic &quot;soul.&quot; It does not change.</li><li><strong>Ephemeral Credentials:</strong> The underlying Agent Mesh core manages the lifecycle. While the identity is static, the credentials used to sign requests have a strict <strong>15-minute TTL</strong> by default.</li></ol><p>This means that even if an agent’s keys were theoretically compromised, they would be useless within minutes. The system handles zero-downtime rotation automatically — a standard previously reserved for high-end microservices, now available for AI agents.</p><h3><strong>The Protocol: Verify, Then Trust</strong></h3><p>The integration forces a “Verify, Then Trust” workflow using TrustedAgentWorker and TrustGatedQueryEngine.</p><ul><li><strong>The Handshake:</strong> Before any data is exchanged, agents perform a cryptographic handshake. The TrustHandshake protocol verifies the peer&#39;s signature against the AgentRegistry—our &quot;Yellow Pages&quot; for trusted DIDs.</li><li><strong>Sponsor Accountability:</strong> Every action is traced back to a sponsor_email via the Delegation Chain. You might not know <em>which</em> user triggered the agent yet, but you will always know <em>who</em> deployed it and who is accountable for its actions.</li></ul><h3><strong>How It Works</strong></h3><p>The code remains clean, but the security posture changes strictly. Here is how you wrap a standard query engine with the trust layer:</p><h4>Python</h4><pre>from llama_index.agent.agentmesh import (<br>    CMVKIdentity,<br>    TrustedAgentWorker,<br>    TrustGatedQueryEngine,<br>)<br><br># 1. Generate a verifiable identity <br># The integration handles the persistent identity; <br># the mesh core manages the 15-min credential rotation.<br>identity = CMVKIdentity.generate(&#39;research-agent&#39;, capabilities=[&#39;search&#39;])<br><br># 2. Create an agent that requires this identity<br>worker = TrustedAgentWorker.from_tools(<br>    tools=[search_tool],<br>    llm=llm,<br>    identity=identity,<br>)<br><br># 3. Gate your data access<br># The engine will now REJECT queries from agents without <br># valid, unexpired credentials.<br>trusted_engine = TrustGatedQueryEngine(<br>    query_engine=base_engine,<br>    identity=identity,<br>)</pre><h3><strong>What’s Next: The Road to OBO</strong></h3><p>While this release solves <strong>Agent-to-Agent</strong> trust and <strong>Sponsor</strong> accountability, we are already looking ahead. The current architecture secures the <em>pipeline</em>, but the next frontier is <strong>On-Behalf-Of (OBO)</strong> flows — passing the end-user’s context through the mesh to enforce granular, per-user access control.</p><p>For now, this integration ensures that your agents are no longer anonymous scripts running in the dark. They are verifiable, accountable services ready for production.</p><p>Check out the code in <a href="https://github.com/run-llama/llama_index/pull/20644">Pull Request #20644</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d98361f073e" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>