<?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: Imran Siddique</title>
    <description>The latest articles on DEV Community by Imran Siddique (@mosiddi).</description>
    <link>https://dev.to/mosiddi</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%2F3672280%2F7ad22e95-3054-4afd-ba09-0fdc0e9cf836.jpg</url>
      <title>DEV Community: Imran Siddique</title>
      <link>https://dev.to/mosiddi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mosiddi"/>
    <language>en</language>
    <item>
      <title>Soon There Will Be More Agents Than Users. Here Is the Trust Layer That Makes That a Good Thing.</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:52:56 +0000</pubDate>
      <link>https://dev.to/mosiddi/soon-there-will-be-more-agents-than-users-here-is-the-trust-layer-that-makes-that-a-good-thing-221o</link>
      <guid>https://dev.to/mosiddi/soon-there-will-be-more-agents-than-users-here-is-the-trust-layer-that-makes-that-a-good-thing-221o</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AYL6X_erkkDQrPp6B" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AYL6X_erkkDQrPp6B" width="1024" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A map of where the internet of agents is heading, the work I have been doing one layer ahead of it, and how we get to a future you can actually trust.&lt;/p&gt;

&lt;p&gt;In a few years, most of the meaningful activity on the internet will not be people clicking. It will be agents acting. Booking, negotiating, filing, reconciling, buying, delegating to other agents, all on our behalf, across the boundaries between companies that have never met.&lt;/p&gt;

&lt;p&gt;I think that future is good. I have spent the last stretch of my career building toward it on purpose. But it only works if we get one thing right, and it is the thing almost no one is building yet.&lt;/p&gt;

&lt;p&gt;Agents need what people and services already have: provable trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  The gap nobody had to think about, until now
&lt;/h3&gt;

&lt;p&gt;Every serious actor on the internet already carries verifiable trust. A person has an identity and credentials. A service has a certificate. An API call carries a signed token. A container has a digest. A machine has a hardware root. We spent thirty years building that fabric, and it is the reason you will put your credit card into a web page you have never visited. TLS and certificate authorities did not make the web safe by scaring people. They made commerce possible by making trust verifiable.&lt;/p&gt;

&lt;p&gt;Agents have none of that yet. An agent today can authenticate, but it cannot prove what it is, what it was allowed to do, or what it actually did, to anyone who does not already trust its operator. For a chatbot, that does not matter. For an agent moving money, touching patient records, or delegating a task to another company’s agent, it is the whole game.&lt;/p&gt;

&lt;p&gt;So, the internet of agents needs its own trust layer. Not guardrails bolted on after the fact. A native fabric of identity, authority, and provenance that any third party can verify without taking anyone’s word for it.&lt;/p&gt;

&lt;p&gt;That fabric is what I have been building, and I have been building it one layer ahead of where the conversation was.&lt;/p&gt;

&lt;h3&gt;
  
  
  The path so far, and why each step came early
&lt;/h3&gt;

&lt;p&gt;Here is the honest sequence, because the map matters more than the milestones.&lt;/p&gt;

&lt;p&gt;Enforcement, while the industry was still filtering tokens. Running eleven agents in production against real systems taught me the thing most safety tooling misses: the danger is not what a model says, it is what an agent does. A jailbreak detector sees no jailbreak when an agent simply executes a tool call that wipes a database. So, I built the &lt;a href="https://github.com/microsoft/agent-governance-toolkit" rel="noopener noreferrer"&gt;Agent Governance Toolkit&lt;/a&gt; to govern the action itself, every tool call intercepted and evaluated against declarative policy before it runs, deterministic and fail-closed, covering all ten of the OWASP Agentic risks by design. When AGT shipped, the category itself was still the news. That was the point. The enforcement layer had to exist before anyone could see it was missing.&lt;/p&gt;

&lt;p&gt;Naming the trust gap before the protocols admitted it. As MCP and A2A won the transport war, I said plainly what they left out. The parts of AGT that became &lt;a href="https://microsoft.github.io/agent-governance-toolkit/packages/agent-mesh/" rel="noopener noreferrer"&gt;AgentMesh&lt;/a&gt; were built as the trust layer those protocols do not provide. Identity, delegation, and provenance for agents, because the transport layer was never going to supply them.&lt;/p&gt;

&lt;p&gt;Pointing at the seam, and watching the field converge on it. Enforcement gets you policy and a tamper-evident log. It does not give you the decision itself as a sealed artifact that an outside party can verify without trusting the operator who produced it. I flagged that seam in the open. What happened next is the part I find most telling. Independent builders across the community converged on the same primitives to close it: canonical hashing, pre-execution sealing, offline verification, and an anchor that belongs to no single operator. When that many people build toward the same point on a map, the map is real.&lt;/p&gt;

&lt;p&gt;Formalizing the convergence into open standards. That is what the &lt;a href="https://agentrust-io.com/" rel="noopener noreferrer"&gt;agentrust-io&lt;/a&gt; specifications are. &lt;a href="https://manifest.agentrust-io.com/" rel="noopener noreferrer"&gt;Agent Manifest&lt;/a&gt; gives an agent a provable identity across its ten trust surfaces. &lt;a href="https://trace.agentrust-io.com/" rel="noopener noreferrer"&gt;TRACE&lt;/a&gt; turns a decision into hardware-rooted evidence anyone can verify offline. &lt;a href="https://cmcp.agentrust-io.com/" rel="noopener noreferrer"&gt;Confidential MCP&lt;/a&gt; enforces policy where neither the operator nor a compromised dependency can reach it. &lt;a href="https://ca2a.agentrust-io.com/" rel="noopener noreferrer"&gt;cA2A&lt;/a&gt; carries all of it across the boundary between agents. Four specs, one idea: turn “trust us” into “verify it yourself.”&lt;/p&gt;

&lt;p&gt;Building the substrate underneath. A policy engine is only as trustworthy as the ground it runs on. That is why the next layer is hardware, and why the work now sits on a confidential-computing substrate that proves the governance held. Enforcement, evidence, and the silicon that anchors both.&lt;/p&gt;

&lt;p&gt;Each of those steps looked early when I took it. None of them looks early now. That is usually how you know you were reading the road correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the path goes next
&lt;/h3&gt;

&lt;p&gt;I would rather show you the horizon than sell you the current milestone, so here is where I think this goes.&lt;/p&gt;

&lt;p&gt;Agents get portable, verifiable reputations. Once an agent can prove what it is and what it did, it can carry that proof between organizations. An agent that has behaved correctly under attested policy for ten thousand transactions is a different counterparty than one with no history, and soon you will be able to tell the difference cryptographically, not by trusting a logo.&lt;/p&gt;

&lt;p&gt;Delegation becomes an economy. When authority can be attenuated and proven at every hop, agents can safely hand work to other agents across company lines. That is the unlock for an actual agent-to-agent economy, and it is why the delegation problem is worth solving now rather than after the incidents.&lt;/p&gt;

&lt;p&gt;Trust becomes infrastructure, and then it becomes invisible. The same way nobody thinks about TLS when they buy something online, nobody will think about attestation when their agent pays an invoice. The win condition for a trust layer is that it disappears into the floor. Open standards are how it gets there, because a closed standard for open verification is a contradiction.&lt;/p&gt;

&lt;p&gt;The scaling unlock is subtraction, not addition. My whole engineering philosophy is that systems scale better when you remove complexity, not pile it on. The agent trust layer wins the same way. It does not add more controls you have to trust. It removes the need to trust in the first place. Every “probably” becomes a proof, and every proof you can verify is one fewer thing you have to worry about.&lt;/p&gt;

&lt;h3&gt;
  
  
  The invitation
&lt;/h3&gt;

&lt;p&gt;I am not describing this future so you will admire the map. I am describing it because it is being built in the open, right now, and it gets better with more hands on it.&lt;/p&gt;

&lt;p&gt;If you are running agents in production and feeling the gap between “it works” and “I can prove it works,” you are standing exactly where I was when this started. The specifications are public, the conformance tests are public, and the design happens where you can push on it. I would rather have you as a builder of this trust layer than a spectator of it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The internet of agents is coming either way. Whether it is something we can trust is still being decided, and that decision is a set of choices we make now, in code, in the open. I know which way I am building. Come build it with me.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>artificialintelligen</category>
      <category>aigovernance</category>
      <category>openstandards</category>
      <category>agents</category>
    </item>
    <item>
      <title>Your Policy Engine Can Lie. Ours Can’t.</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:50:56 +0000</pubDate>
      <link>https://dev.to/mosiddi/your-policy-engine-can-lie-ours-cant-794</link>
      <guid>https://dev.to/mosiddi/your-policy-engine-can-lie-ours-cant-794</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AtjnwC5gctZ0qGaJI" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AtjnwC5gctZ0qGaJI" width="1024" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducing Confidential MCP, hardware-attested policy enforcement at the MCP tool boundary, running inside a Trusted Execution Environment.&lt;/p&gt;

&lt;p&gt;An agent calls a tool. The policy engine says allow. The tool call goes through. None of that proves the policy engine itself was not compromised.&lt;/p&gt;

&lt;p&gt;This is the ceiling that software-only MCP governance hits. It is not a theoretical ceiling. It is a structural one, and it matters for every organization deploying AI agents against sensitive data in regulated environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/agentrust-io/cmcp" rel="noopener noreferrer"&gt;Confidential MCP (cMCP)&lt;/a&gt; is the answer. It launched publicly on June 23 at the &lt;a href="https://www.opaque.co/resources/articles/opaque-extends-the-agent-governance-toolkit-with-verifiable-identity-and-first-ever-verifiably-governed-and-secure-mcp" rel="noopener noreferrer"&gt;Confidential Computing Summit&lt;/a&gt;, and the gateway and verifier are available now.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Software-Only Governance
&lt;/h3&gt;

&lt;p&gt;When your policy engine runs in the same operating system as your agent, your administrator, and your dependencies, three things become true that you cannot escape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Cedar policy on disk may not be the Cedar policy that ran. A rogue administrator can swap the bundle after approval. The hash check runs inside the same OS the administrator controls. A hash check performed by software inside a compromised OS is not a hash check. It is a controlled reading of a value the attacker controls.&lt;/li&gt;
&lt;li&gt;The allow/deny decision may have been flipped in memory. A supply chain CVE in the evaluator runs in the same address space as the attacker. Memory corruption attacks that change a deny to an allow are not hypothetical in constrained AI runtimes.&lt;/li&gt;
&lt;li&gt;The audit log may not reflect what actually happened. Any party holding the software signing key can reconstruct a valid audit chain after the fact. This is not speculation. It is the direct implication of holding the key outside hardware. If the key can be extracted, the log can be forged retroactively.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The control plane that governs tool calls must run where it cannot be reached by the process it governs.&lt;/p&gt;

&lt;p&gt;That is what cMCP does.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;

&lt;p&gt;cMCP is a gateway that intercepts every MCP tool call before it reaches the tool server, evaluates it against a Cedar policy bundle inside a Trusted Execution Environment, and produces a signed TRACE Trust Record as the output of every session.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  │
  ▼
cMCP Gateway (TEE: AMD SEV-SNP / Intel TDX / NVIDIA H100 CC)
  │
  ├── Cedar Policy Engine ←── Policy Bundle (measured into hardware
  │ attestation at startup, before any code
  │ runs)
  │
  ├── Tool Catalog ←── Approved tools with schema hashes, endpoint
  │ IDs, sensitivity labels, compliance domains
  │
  ├── Audit Chain ←── Hash-chained tamper-evident log, hardware-
  │ sealed
  │
  └── TRACE Claim ←── Signed by TEE key (key never leaves
  │ enclave
        │
        ▼
   Tool Server (Salesforce, Snowflake, database, API...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At startup, before any user code runs, the gateway measures the Cedar policy bundle hash into the hardware attestation report. This is not a hash check performed after startup. It is a hardware measurement taken at enclave boot. Changing any policy file changes the measurement. A valid attestation report with a known measurement is proof the known policy bundle ran.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inside the TEE
&lt;/h3&gt;

&lt;p&gt;The policy bundle measurement is the anchor of the entire trust chain. Here is how it flows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enclave boot. The TEE firmware measures the image, kernel, and workload into hardware registers (PCRs for TPM, MRTD/RTMRs for TDX, GCTX.MEASUREMENT for SEV-SNP) before any user code executes.&lt;/li&gt;
&lt;li&gt;Policy bundle sealing. At cMCP gateway startup, the Cedar bundle hash is extended into the measurement chain. The attestation report the hardware produces is specific to this exact policy.&lt;/li&gt;
&lt;li&gt;Tool call interception. Every inbound MCP tool call is evaluated by the Cedar engine inside the TEE. The decision (allow / deny / redact) and the full call payload are appended to the hardware-sealed audit chain.&lt;/li&gt;
&lt;li&gt;TRACE Claim production. At session end (or per call, configurable), the gateway produces a GatewayClaim, a TRACE Trust Record signed by a key that never left the enclave.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The connectivity layer between the agent and the TEE sees ciphertext. The only thing that exits the enclave in plaintext is the signed TRACE Claim.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cedar Policy: What Goes Inside the TEE
&lt;/h3&gt;

&lt;p&gt;Cedar is a strongly-typed, formally-verifiable policy language. A Cedar policy evaluated inside a TEE combines the formal properties of Cedar with the hardware guarantees of the enclave.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Permit&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="n"&gt;calls&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;payments&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt;
&lt;span class="n"&gt;permit&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"call_tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;resource&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;workflow_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;"payments-processor"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Block&lt;/span&gt; &lt;span class="n"&gt;Salesforce&lt;/span&gt; &lt;span class="n"&gt;contact&lt;/span&gt; &lt;span class="n"&gt;queries&lt;/span&gt; &lt;span class="n"&gt;once&lt;/span&gt; &lt;span class="n"&gt;PII&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;session&lt;/span&gt;
&lt;span class="n"&gt;forbid&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"call_tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"salesforce.contacts"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_max_sensitivity&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;"pii"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Block&lt;/span&gt; &lt;span class="n"&gt;anything&lt;/span&gt; &lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt; &lt;span class="k"&gt;without&lt;/span&gt; &lt;span class="n"&gt;HITL&lt;/span&gt; &lt;span class="n"&gt;approval&lt;/span&gt;
&lt;span class="n"&gt;forbid&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"call_tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"payments.authorize"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hitl_approved&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cedar evaluates forbid rules before permit rules. There is no rule ordering ambiguity. The formal semantics are the same in the TEE as they are in development: no implementation divergence, no runtime surprises.&lt;/p&gt;

&lt;p&gt;The context.session_max_sensitivity field is the data class elevation tracker. When the first tool call touches PII, the session sensitivity label is elevated. All subsequent policy decisions in the same session have access to that fact. This prevents data class laundering, the scenario where an agent calls a PII tool early in a session and then routes the result through a nominally “public” tool that exfiltrates it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tool Catalog
&lt;/h3&gt;

&lt;p&gt;Before the gateway starts, the operator defines an approved tool catalog. Each catalog entry includes the tool’s schema hash and the definition hash of its approved parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"salesforce.contacts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://salesforce-mcp.internal:9001/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tls_fingerprint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SHA256:..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http-sse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rotation_mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"key-pinned"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"approved_definition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Query Salesforce contacts by account name."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"input_schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"max_records"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"integer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"definition_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:b42ecf14612f23456b5b07948..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"compliance_domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pii"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sensitivity_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pii"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"approved_by"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"security-team@acme.co"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;definition_hash is the SHA-256 of the canonical JSON of approved_definition. At runtime, the gateway rejects any tool response whose schema has drifted from the approved definition. This is the defense against MCP rug-pulls, the class of attack where a tool server sends a notifications/tools/list_changed event and silently expands the tool’s capabilities after the agent has started operating.&lt;/p&gt;

&lt;h3&gt;
  
  
  The TRACE Claim
&lt;/h3&gt;

&lt;p&gt;Every session produces a GatewayClaim. This is a &lt;a href="https://github.com/agentrust-io/trace-spec" rel="noopener noreferrer"&gt;TRACE v0.1 Trust Record&lt;/a&gt; signed by the TEE-bound key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"eat_profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tag:agentrust.io,2026:trace-v0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"iat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1750676142&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"subject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"spiffe://trust.acme.co/agent/payments-processor/prod"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"trace.runtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"amd-sev-snp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"measurement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha384:c9e4b1d2e3f4a5b6..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"rim_uri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://kdsintf.amd.com/vcek/v1/Milan/cert_chain"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"trace.policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bundle_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:b2c3d4e5f6a7b8c9..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enforcement_mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enforce"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.2.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"trace.cnf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jwk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"kty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"crv"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"P-256"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"x9ZBJpokJFQ_oRZzbtzo1Pqqkexd7MqEqP8wsZWdr_c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1Z0fdYWZI_aooZGNiqXl24SAoGmPK9e1F5-114jl8I0"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"gateway.audit_chain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"root"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:aabbcc..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:ddeeff..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"length"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ed25519-over-canonical-JSON"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trace.policy.bundle_hash in the claim is the same hash that was measured into the hardware attestation report at startup. A verifier who checks both the hardware report and the claim confirms they match, without trusting the operator who produced either.&lt;/p&gt;

&lt;p&gt;The gateway.audit_chain.root and tip are the hash-chain anchors of the full audit log. The verifier can check internal consistency without replaying every entry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware Providers
&lt;/h3&gt;

&lt;p&gt;cMCP runs on all major TEE surfaces:&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%2Fcdn-images-1.medium.com%2Fmax%2F841%2F0%2Ap1shVuBHCT-7SBrU" 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%2Fcdn-images-1.medium.com%2Fmax%2F841%2F0%2Ap1shVuBHCT-7SBrU" width="841" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Provider auto-detects: SEV-SNP → TDX → TPM → software. In CMCP_DEV_MODE=1 the software-only provider runs without hardware, which is useful for development and CI.&lt;/p&gt;

&lt;p&gt;The software-only provider produces structurally valid TRACE Claims but without a hardware measurement root. Any verifier enforcing hardware attestation will reject these. This is by design: dev claims and prod claims are distinguishable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement Modes
&lt;/h3&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%2Fcdn-images-1.medium.com%2Fmax%2F709%2F0%2AUCamvHq9ZTZ_CyyA" 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%2Fcdn-images-1.medium.com%2Fmax%2F709%2F0%2AUCamvHq9ZTZ_CyyA" width="709" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Default is enforcing. The TRACE record reflects the enforcement mode, so a verifier can detect if a production deployment is running in advisory or silent mode. The spec requires that silent mode be explicitly configured. It is never a default.&lt;/p&gt;

&lt;p&gt;In silent mode, the audit chain still records every would-have-denied decision. The suppression is operational (no log lines emitted to the application), not cryptographic (the decisions still appear in the TRACE Claim). This is important: silent is for baselining, not for hiding policy decisions from auditors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;p&gt;No hardware TEE required to get started. CMCP_DEV_MODE=1 uses the software-only provider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;cmcp-gateway
&lt;span class="nb"&gt;mkdir &lt;/span&gt;cmcp-demo &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;cmcp-demo
&lt;span class="nb"&gt;mkdir &lt;/span&gt;policies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write cmcp-config.yaml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;attestation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;auto&lt;/span&gt;
  &lt;span class="na"&gt;enforcement_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;advisory&lt;/span&gt;
&lt;span class="na"&gt;policy_bundle_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./policies/&lt;/span&gt;
&lt;span class="na"&gt;catalog_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./catalog.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write policies/demo.cedar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;permit&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;cMCP&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nv"&gt;"call_tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;resource&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;workflow_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;"demo-agent"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write policies/manifest.json:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"authored_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-23T00:00:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author_identity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"you@yourcompany.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commit_sha"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CMCP_DEV_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 cmcp start &lt;span class="nt"&gt;--config&lt;/span&gt; cmcp-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make a tool call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8443/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "salesforce.contacts",
      "arguments": {"query": "Acme Corp"},
      "_cmcp": {
        "session_id": "sess-001",
        "workflow_id": "demo-agent"
      }
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The startup log confirms the policy bundle hash that was measured. The TRACE Claim at session end confirms the same hash appears in the hardware report. That chain, from bundle hash to hardware measurement to signed claim, is the proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validating a Bundle Before Deployment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cmcp validate-bundle &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--bundle-path&lt;/span&gt; ./policies/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--expected-hash&lt;/span&gt; sha256:b2c3d4e5f6a7b8c9...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This catches the “policy swap after approval” attack class at the CI gate. The CI pipeline computes the expected hash from the approved bundle, stores it in the deployment manifest, and validate-bundle checks it at deploy time. No trust required in the deployment pipeline; the hash check is the check.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verifying a TRACE Claim
&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;cmcp_verify&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;verify_gateway_claim&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;verify_gateway_claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;claim_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gateway-claim.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_policy_hash&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sha256:b2c3d4e5f6a7b8c9...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spiffe://trust.acme.co/agent/payments-processor/prod&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="nf"&gt;print&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;hardware_verified&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True if TEE attestation verifies
&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;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;policy_hash_matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True if bundle_hash matches expected
&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;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;audit_chain_valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True if audit chain is internally consistent
&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;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;receipt_valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True if SCITT receipt resolves
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verification does not require calling back to Opaque, &lt;a href="http://agentrust.io" rel="noopener noreferrer"&gt;agentrust.io&lt;/a&gt;, or any other third party. The verifier checks the Ed25519 signature against the TEE-bound key in cnf, validates the hardware root against the vendor’s public attestation infrastructure, and checks the SCITT receipt against the named transparency log.&lt;/p&gt;

&lt;h3&gt;
  
  
  How This Fits with AGT
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/microsoft/agent-governance-toolkit" rel="noopener noreferrer"&gt;Agent Governance Toolkit&lt;/a&gt; and &lt;a href="https://cmcp.agentrust-io.com/" rel="noopener noreferrer"&gt;cMCP&lt;/a&gt; are designed to compose, not compete.&lt;/p&gt;

&lt;p&gt;AGT provides the software governance layer: Cedar policy evaluation, human-in-the-loop escalation, audit trails, MCP security scanning, prompt injection detection. Every Cedar policy AGT evaluates is the same format as the bundle measured into the cMCP TEE.&lt;/p&gt;

&lt;p&gt;The deployment path for a regulated organization:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write Cedar policies in AGT. Test in AGT’s policy sandbox.&lt;/li&gt;
&lt;li&gt;Approve the bundle through AGT’s change management workflow. AGT records the policy hash.&lt;/li&gt;
&lt;li&gt;Deploy the approved bundle into the cMCP gateway. The gateway measures it into the TEE at startup.&lt;/li&gt;
&lt;li&gt;cMCP produces TRACE Claims for every session. The TRACE Claims reference the same policy hash AGT approved.&lt;/li&gt;
&lt;li&gt;Auditors verify TRACE Claims against the AGT-approved policy hash. Hardware evidence, not operator attestation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AGT is the software layer. cMCP is the hardware layer. TRACE is the evidence layer. They are the same Cedar policy all the way through.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Now
&lt;/h3&gt;

&lt;p&gt;MCP’s growth as the dominant agent-to-tool protocol has made the agent action surface explicit and exploitable. Between January and February 2026, over 30 CVEs targeted MCP servers, clients, and tooling. Palo Alto Unit 42 found that with five connected MCP servers, a single compromised MCP server hit a 78.3% attack success rate.&lt;/p&gt;

&lt;p&gt;The industry response so far has been software controls: validation, schema enforcement, content filtering. These are necessary and not sufficient. Software controls are only as trustworthy as the software stack they run on.&lt;/p&gt;

&lt;p&gt;cMCP adds the layer that software alone cannot provide: a policy engine that runs where neither the agent, nor the operator, nor a compromised dependency can reach it. A signed record that proves what policy ran and what decisions it made, rooted in silicon attestation that predates any user code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&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;cmcp-gateway cmcp-verify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documentation: &lt;a href="http://agentrust-io.github.io/cmcp" rel="noopener noreferrer"&gt;agentrust-io.github.io/cmcp&lt;/a&gt; GitHub: &lt;a href="http://github.com/agentrust-io/cmcp" rel="noopener noreferrer"&gt;github.com/agentrust-io/cmcp&lt;/a&gt; Quickstart: &lt;a href="https://github.com/agentrust-io/cmcp/blob/main/docs/quickstart.md" rel="noopener noreferrer"&gt;docs/&lt;/a&gt;&lt;a href="http://quickstart.md" rel="noopener noreferrer"&gt;quickstart.md&lt;/a&gt; Discord: &lt;a href="http://discord.gg/grgzFEHgkj" rel="noopener noreferrer"&gt;discord.gg/grgzFEHgkj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project launched publicly on June 23 at the Confidential Computing Summit. The gateway, verifier, and quickstart are available now.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>mcps</category>
      <category>cybersecurity</category>
      <category>confidentialcomputin</category>
    </item>
    <item>
      <title>How Do You Prove an AI Agent Did What You Said It Did?</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Tue, 21 Jul 2026 21:48:54 +0000</pubDate>
      <link>https://dev.to/mosiddi/how-do-you-prove-an-ai-agent-did-what-you-said-it-did-5dg4</link>
      <guid>https://dev.to/mosiddi/how-do-you-prove-an-ai-agent-did-what-you-said-it-did-5dg4</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AE5PGA8PLv_OYAh6d" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AE5PGA8PLv_OYAh6d" width="1024" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducing TRACE, an open specification for hardware-attested AI agent governance records, built on IETF RATS, EAT, SCITT, and SLSA.&lt;/p&gt;

&lt;p&gt;Every regulated AI deployment hits the same wall.&lt;/p&gt;

&lt;p&gt;The security or compliance review asks: how do you prove the agent handled our data according to policy? And the answer comes back in the form of documentation. Policy documents. SOC reports. Vendor self-attestation. Mutable application logs.&lt;/p&gt;

&lt;p&gt;None of that proves what actually happened during execution. None of it is verifiable by the relying party without trusting the operator who produced it. So review cycles that should take days stretch into months, and the deployment sits waiting for sign-off on evidence that was never designed to provide it.&lt;/p&gt;

&lt;p&gt;TRACE is the missing piece. It launched publicly on June 23 at the Confidential Computing Summit, and the specification and reference implementation are available now.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Auditors Are Actually Asking
&lt;/h3&gt;

&lt;p&gt;When a bank’s internal risk team, an external auditor, or a customer CISO asks “how do you prove the agent handled our data according to policy,” they are asking three specific questions:&lt;/p&gt;

&lt;p&gt;What actually ran? Not what was deployed. Not what the manifest says. What was loaded into memory and executed at the moment the customer’s data was processed: model weights, agent code, dependency tree, runtime image, and policy bundle, bound together cryptographically and verifiable by an outside party.&lt;/p&gt;

&lt;p&gt;What did it actually do? Which tools the agent called. With what parameters. Against what data class. In what sequence. Across how many agent hops. Software-layer telemetry is self-reported and mutable. It can be reconstructed after the fact by anyone who holds the signing key.&lt;/p&gt;

&lt;p&gt;What rules were actually in force? Not the policy on the document. The policy bundle hash bound to the workload at execution time, with the enforcement mode it ran under, verifiable independently of the workload that ran it.&lt;/p&gt;

&lt;p&gt;TRACE is an open specification for a Trust Record: a signed, hardware-attested artifact that answers all three questions in a form any third party can verify offline without trusting the operator.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Evidence Gap
&lt;/h3&gt;

&lt;p&gt;Here is the state of the art before TRACE:&lt;/p&gt;

&lt;p&gt;Every regulated AI deployment re-litigates trust at every host boundary. Each cloud, each model provider, each agent framework ships its own evidence shape. Auditors cannot compare. Verifiers cannot federate. Workloads cannot move.&lt;/p&gt;

&lt;p&gt;The EU AI Act mandates tamper-evident logging for high-risk AI (Article 12). DORA for financial entities and HIPAA for healthcare carry equivalent audit-trail requirements today. Autonomous agents inside critical infrastructure are landing before the standard exists to govern them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Trust Record
&lt;/h3&gt;

&lt;p&gt;A TRACE Trust Record is the unit of evidence. It answers all three auditor questions in a single signed artifact.&lt;/p&gt;

&lt;p&gt;Each field is independently verifiable. The claims map directly to the three auditor questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model + runtime + build_provenance answer what ran&lt;/li&gt;
&lt;li&gt;tool_transcript answers what it did&lt;/li&gt;
&lt;li&gt;policy + data_class answer what rules were in force&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cnf (confirmation) key is the TEE-bound signing key. It never left the enclave. The transparency URI resolves to an SCITT receipt proving the record was submitted to an append-only log before the verifier ever saw it. The runtime.measurement is the hardware attestation measurement chain, verifiable against the vendor’s Reference Integrity Manifests (RIMs).&lt;/p&gt;

&lt;h3&gt;
  
  
  What TRACE Is Built On
&lt;/h3&gt;

&lt;p&gt;TRACE is a profile, not a parallel stack. It binds existing IETF and industry primitives into one coherent artifact.&lt;/p&gt;

&lt;p&gt;RATS / EAT (RFC 9711): the wire envelope and claim model. NVIDIA NRAS, Intel Trust Authority, and Azure MAA all produce attestation tokens that map into this envelope.&lt;/p&gt;

&lt;p&gt;SLSA Provenance v1.0: build-time provenance. Build Level 2 is the minimum for v0.1-conformant records, and Level 3 is the target for production reference implementations.&lt;/p&gt;

&lt;p&gt;SPIFFE / SPIRE: workload identity. The SVID is bound to the TEE measurement, so identity is rooted in hardware, not in software keys the operator controls.&lt;/p&gt;

&lt;p&gt;SCITT: the append-only transparency log. TRACE defines a SCITT profile for Trust Record inclusion, covering Signed Statement registration, Receipt format, and key rotation semantics. Once a record is in the log, neither the issuer nor the operator can delete or modify it.&lt;/p&gt;

&lt;p&gt;EAR (draft-ietf-rats-ar4si): verifier output format. The appraisal field separates what was claimed from what was accepted by an independent verifier. A “null verifier” that accepts everything is structurally different from an “affirming” verifier that checked the RIMs.&lt;/p&gt;

&lt;p&gt;MCP / A2A: the agent execution surface. TRACE adds cryptographic binding of the transcript hash into the EAT envelope and per-call data_class classification.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Threat Model
&lt;/h3&gt;

&lt;p&gt;TRACE is sound only against named adversaries under named assumptions.&lt;/p&gt;

&lt;h4&gt;
  
  
  In scope:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;An agent itself, acting under autonomy, prompt injection, goal hijack, or alignment drift. TRACE makes misbehavior crossing a protocol boundary visible at the moment it happens.&lt;/li&gt;
&lt;li&gt;A cloud or infrastructure operator with root access. This adversary cannot forge a TRACE record for a run that violated policy, because the signing key never left the TEE.&lt;/li&gt;
&lt;li&gt;A compromised orchestration layer (kubelet, container runtime). This adversary cannot substitute the workload without invalidating the hardware measurement.&lt;/li&gt;
&lt;li&gt;A compromised dependency. This is caught by build_provenance at SLSA Level 2+.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Permanently out of scope:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;TEE side-channel attacks (cache, timing, speculative execution)&lt;/li&gt;
&lt;li&gt;Compromise of the silicon root vendor or transparency log operator&lt;/li&gt;
&lt;li&gt;Model behavior inside the TEE, including prompt injection, hallucination, and alignment drift. TRACE proves what ran and which countermeasures were in force. It does not adjudicate whether the model’s output was correct.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This scope boundary matters. TRACE is not a magic seal. It is a hardware-rooted evidence layer. A bad model that runs under a valid TRACE record still produces bad output. What TRACE gives you is the proof of which policy was enforced and which tools were called, which is what regulators and auditors actually need.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware Roots
&lt;/h3&gt;

&lt;p&gt;TRACE supports all major TEE platforms:&lt;/p&gt;

&lt;p&gt;The key hierarchy is: silicon root key (vendor-managed, hardware-bound) → platform attestation key → workload attestation key (TEE-bound, ephemeral) → record signing key. The record signing key is what appears in cnf. It is the only key that touches the record, and it never leaves the enclave.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generating a Trust Record
&lt;/h3&gt;

&lt;p&gt;The record is a JWT with the EAT profile URI tag:agentrust.io,2026:trace-v0.1. In constrained environments (high-throughput inference, edge deployments), TRACE also supports CBOR-COSE encoding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verifying a Trust Record
&lt;/h3&gt;

&lt;p&gt;Verification does not require calling back to the issuer. The verifier checks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Signature binding. Verifies against the key in cnf. A record with no verifiable binding is rejected.&lt;/li&gt;
&lt;li&gt;Freshness. iat is within the maximum record age (default 24 hours). Challenge nonces are checked when issued.&lt;/li&gt;
&lt;li&gt;Hardware root. The signature chain resolves to a known silicon root (NVIDIA, Intel, AMD, or cloud equivalent).&lt;/li&gt;
&lt;li&gt;Measurement integrity. Runtime measurements match published Reference Integrity Manifests.&lt;/li&gt;
&lt;li&gt;Policy hash. Matches the policy bundle the verifier expects.&lt;/li&gt;
&lt;li&gt;SCITT receipt. Resolves on the named transparency log.&lt;/li&gt;
&lt;li&gt;SLSA provenance. Resolves to a trusted builder.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No vendor in the trust path beyond the silicon root and the transparency log operators.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standards Alignment
&lt;/h3&gt;

&lt;p&gt;TRACE is on the standardization track at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CoSAI WS4 (OASIS Coalition for Secure AI): active track&lt;/li&gt;
&lt;li&gt;AAIF (Agentic AI Foundation, Linux Foundation): targeting submission alongside Agent Manifest&lt;/li&gt;
&lt;li&gt;RATS WG (IETF): built on RFC 9711 (EAT) and RFC 9334 (RATS). Vendor profile annexes co-authored with NVIDIA, Intel, AMD, Microsoft, and Google are planned for v1.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reference implementation is Confidential MCP (cMCP), which produces TRACE Trust Records as its primary output on every session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters Now
&lt;/h3&gt;

&lt;p&gt;The EU AI Act Article 12 requires tamper-evident logging for high-risk AI systems. The provisional compliance timeline lands around December 2027. That sounds distant. The problem is that regulated organizations deploying AI agents today are building the audit infrastructure now, and the decisions made in the next twelve months about what evidence to collect and how to structure it will determine whether the 2027 deadline is a paperwork exercise or a genuine compliance posture.&lt;/p&gt;

&lt;p&gt;TRACE gives the industry a shared, open, standards-aligned format for that evidence. Not a vendor lock-in, not a proprietary format, not documentation. Cryptographic proof, rooted in silicon, verifiable offline by anyone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&gt;

&lt;p&gt;Specification: trace.agentrust-io.com GitHub: github.com/agentrust-io/trace-spec Schema: schema/trace-claim.json Discord: discord.gg/grgzFEHgkj&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://www.linkedin.com/pulse/how-do-you-prove-ai-agent-did-what-said-imran-siddique-cdabc" rel="noopener noreferrer"&gt;&lt;em&gt;https://www.linkedin.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trace</category>
      <category>aisecurity</category>
      <category>aigovernance</category>
      <category>confidentialcomputin</category>
    </item>
    <item>
      <title>Prove What Your Agent Was, Not Just Who Called It</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Tue, 21 Jul 2026 21:45:29 +0000</pubDate>
      <link>https://dev.to/mosiddi/prove-what-your-agent-was-not-just-who-called-it-1egc</link>
      <guid>https://dev.to/mosiddi/prove-what-your-agent-was-not-just-who-called-it-1egc</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AfrsAoIMnKWrN-4hM" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AfrsAoIMnKWrN-4hM" width="1024" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducing Agent Manifest, an open specification for cryptographically binding the complete trust surface of an AI agent into a single hardware-attestable record.&lt;/p&gt;

&lt;p&gt;A signed JWT proves who called an API. It proves nothing about the agent that made the call.&lt;/p&gt;

&lt;p&gt;Which system prompt defined its behavior. Which model version ran. Which tools were authorized. Whether the policy bundle in memory matches what was reviewed. Whether a human approved the configuration before it shipped. A JWT answers the authentication question. It does not answer the attestation question. And in regulated environments, it is the attestation question that matters.&lt;/p&gt;

&lt;p&gt;This is the gap Agent Manifest closes. It launched publicly on June 23 at the Confidential Computing Summit, and the spec, SDK, and conformance suite are available now.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem: Agents Have No Identity Primitive
&lt;/h3&gt;

&lt;p&gt;Every other entity in a modern enterprise system has a verifiable identity. Users carry X.509 certificates and OAuth tokens. Services carry SPIFFE SVIDs. APIs are called with signed JWTs. Containers have image digests. Infrastructure has hardware TPM measurements.&lt;/p&gt;

&lt;p&gt;AI agents have none of these.&lt;/p&gt;

&lt;p&gt;An agent calling Salesforce, your payment processor, or a healthcare database today presents no unforgeable proof of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which system prompt defined its behavior&lt;/li&gt;
&lt;li&gt;Which model version is running&lt;/li&gt;
&lt;li&gt;Which policy bundle was approved by your security team&lt;/li&gt;
&lt;li&gt;Which tools were authorized and what they can access&lt;/li&gt;
&lt;li&gt;Whether its knowledge base was tampered with&lt;/li&gt;
&lt;li&gt;Whether a human reviewed and approved the configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not a theoretical problem. Between January and February 2026, researchers filed over 30 CVEs targeting MCP servers, clients, and tooling. Palo Alto Unit 42 found that with five connected MCP servers, a single compromised server hit a 78.3% attack success rate. The attack surface is real and it is growing.&lt;/p&gt;

&lt;p&gt;The gap is not authentication. Agents can authenticate with certificates and tokens today. The gap is attestation: the inability to prove, to a third party who does not trust the operator, that the agent running right now is the agent that was approved, with the tools that were authorized, under the policy that was reviewed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Ten Unattested Surfaces
&lt;/h3&gt;

&lt;p&gt;Every AI agent has ten surfaces that define its complete trust boundary. None of them have a standard attestation mechanism today.&lt;/p&gt;

&lt;p&gt;Agent Manifest binds all ten into one signed, hardware-attestable record. A verifying party who holds the manifest and the accompanying attestation report can prove, without trusting the operator, that a specific agent instance ran specific code under specific policy with specific tools, produced specific decisions, and received specific human oversight.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Manifest Is Not the Artifacts
&lt;/h4&gt;

&lt;p&gt;The manifest stores hashes and identifiers, not content. The system prompt hash is bound; the system prompt itself is not stored in the manifest. This keeps manifests small, portable, and privacy-preserving, while ensuring that any change to any artifact breaks the hash binding and is detectable.&lt;/p&gt;

&lt;p&gt;Each artifact binding looks like this:&lt;/p&gt;

&lt;p&gt;Every field that could be tampered with is bound. allow_dynamic_registration: false prevents MCP rug-pulls, the class of attack where a tool server signals a notifications/tools/list_changed event mid-session and silently expands the agent’s capabilities. rug_pull_policy: deny-and-hold defines what happens when one is detected anyway.&lt;/p&gt;

&lt;h4&gt;
  
  
  Attestation Levels
&lt;/h4&gt;

&lt;p&gt;The spec defines three conformance levels:&lt;/p&gt;

&lt;p&gt;Level 0: software only. Ed25519-signed manifest, no hardware attestation. Useful for development and low-stakes contexts. Any privileged operator can forge this; its trust model is operator trust.&lt;/p&gt;

&lt;p&gt;Level 1: TPM-attested. The manifest hash is sealed into a TPM measurement. A TPM quote references the manifest. This roots the binding in hardware but relies on TPM firmware integrity, which a co-tenant cannot compromise.&lt;/p&gt;

&lt;p&gt;Level 2: TEE-attested. The manifest hash is measured into the hardware attestation report before any user code runs (via AMD SEV-SNP, Intel TDX, or equivalent). The signing key never leaves the enclave. All ten artifacts bound. This is the level that produces evidence a regulator, auditor, or enterprise CISO cannot dismiss as operator self-attestation.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Lifecycle
&lt;/h4&gt;

&lt;p&gt;An Agent Manifest follows five phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authoring. Developer creates the unsigned draft, binding all artifacts by hash.&lt;/li&gt;
&lt;li&gt;Signing. Security reviewer approves and signs with an Ed25519 or ML-DSA-65 key.&lt;/li&gt;
&lt;li&gt;Attestation. At workload launch, the TEE measures the manifest hash into the hardware report.&lt;/li&gt;
&lt;li&gt;Verification. At every trust boundary (tool call, delegation hop, audit), a relying party verifies.&lt;/li&gt;
&lt;li&gt;Revocation. When any artifact changes, a revocation record is published to the transparency log.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;manifest_id is a UUID v7 and is immutable per issuance. Any change to any signed field produces a new manifest with a new UUID. There is no in-place update mechanism. A previous_manifest_id field chains to the prior manifest for audit continuity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why “Tamper-Evidence Over Tamper-Resistance”
&lt;/h3&gt;

&lt;p&gt;This is the key design choice worth understanding.&lt;/p&gt;

&lt;p&gt;Agent Manifest does not prevent a rogue operator from swapping a system prompt in memory. What it does is make that swap detectable by a third party who holds the manifest and compares it against the hardware attestation report. The measurement happened in silicon, before any user code ran, and the signing key never left the TEE. The operator with root access on the host cannot retroactively produce a matching attestation report for a run that used a different system prompt.&lt;/p&gt;

&lt;p&gt;The Anthropic Zero Trust for AI Agents framework phrases it well: does a control make the attack impossible, or just tedious? Software-signed manifests are tedious controls. Hardware-attested manifests are impossible controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standards Alignment
&lt;/h3&gt;

&lt;p&gt;Agent Manifest is designed to compose with, not replace, existing standards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SPIFFE/SPIRE: agent_id is a SPIFFE SVID URI, and identity is hardware-rooted in TEE deployments&lt;/li&gt;
&lt;li&gt;SLSA: supply chain provenance is bound in artifacts.supply_chain&lt;/li&gt;
&lt;li&gt;Cedar (AGT): policy bundle binding in artifacts.policy_bundle uses AGT’s Cedar bundle format&lt;/li&gt;
&lt;li&gt;MCP: tool manifest binding in artifacts.tool_manifest uses MCP’s tool descriptor schema, extended with hash bindings&lt;/li&gt;
&lt;li&gt;TRACE: decision trace uses TRACE Trust Records for hardware-signed per-invocation evidence&lt;/li&gt;
&lt;li&gt;EU AI Act Art. 14/15: hitl_record covers human oversight records required for high-risk AI systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The specification is targeting the Agentic AI Foundation (AAIF) at the Linux Foundation. The v0.1 draft is published at manifest.agentrust-io.com with 197 conformance tests against the formal specification.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Verification Protocol
&lt;/h3&gt;

&lt;p&gt;The verifier checks the signature, the expires_at timestamp, the manifest_id against the revocation log, and, if a TEE attestation report is provided, the hardware measurements against the manifest hash. No callback to the issuer. No vendor in the trust path beyond the silicon root.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem This Solves for Regulated Deployments
&lt;/h3&gt;

&lt;p&gt;Consider a bank deploying an AI agent that calls a payment authorization API. The bank’s CISO needs to show a regulator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent that called the API is the agent that was reviewed and approved by the security team&lt;/li&gt;
&lt;li&gt;The policy bundle in force at the time of the call is the policy bundle that was approved&lt;/li&gt;
&lt;li&gt;The model version running is the model version that was safety-evaluated&lt;/li&gt;
&lt;li&gt;No tool capabilities were added between approval and execution&lt;/li&gt;
&lt;li&gt;A human sign-off exists for high-value transactions above a threshold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without Agent Manifest, every one of these is answered by operator documentation: logs the operator controls, signed by keys the operator holds. With Agent Manifest at Level 2, every one is answered by hardware evidence rooted in silicon the operator does not control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&gt;

&lt;p&gt;That is the gap this fills.&lt;/p&gt;

&lt;p&gt;Documentation: manifest.agentrust-io.com Specification: github.com/agentrust-io/agent-manifest Discord: discord.gg/grgzFEHgkj&lt;/p&gt;

&lt;p&gt;The project launched publicly on June 23 at the Confidential Computing Summit. The spec, SDK, and 197-test conformance suite are available now. Open an issue or join the Discord to get involved.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://www.linkedin.com/pulse/prove-what-your-agent-just-who-called-imran-siddique-xtyuc" rel="noopener noreferrer"&gt;&lt;em&gt;https://www.linkedin.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agentgovernance</category>
      <category>agentmanifest</category>
      <category>confidentialcomputin</category>
      <category>openstandards</category>
    </item>
    <item>
      <title>Every regulated AI deployment hits the same wall. The compliance review asks: prove the agent handled our data according to...</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Fri, 03 Jul 2026 20:17:48 +0000</pubDate>
      <link>https://dev.to/mosiddi/every-regulated-ai-deployment-hits-the-same-wall-the-compliance-review-asks-prove-the-agent-mhb</link>
      <guid>https://dev.to/mosiddi/every-regulated-ai-deployment-hits-the-same-wall-the-compliance-review-asks-prove-the-agent-mhb</guid>
      <description>&lt;p&gt;Every regulated AI deployment hits the same wall. The compliance review asks: prove the agent handled our data according to policy.  &lt;/p&gt;

&lt;p&gt;The answer comes back as a PDF. Policy documents, SOC reports, vendor self-attestation, application logs the operator can rewrite. None of it proves what happened during execution. None of it is verifiable without trusting the people who produced it. So a review that should take days takes months.&lt;br&gt;&lt;br&gt;
Auditors are really asking three questions. What actually ran, the exact model, code, and policy loaded into memory at the moment the data was processed. What it actually did, which tools, with what parameters, against what data class. And what rules were actually in force, the policy hash bound to the workload at execution, not the one in the binder.  &lt;/p&gt;

&lt;p&gt;TRACE answers all three in a single signed, hardware-attested record that anyone can verify offline. It is not a new stack. It is a profile that binds primitives the industry already trusts: IETF RATS and EAT, SCITT transparency logs, SLSA provenance, SPIFFE identity. The signing key never leaves the enclave, so even a root-level operator cannot forge a record for a run that violated policy.  &lt;/p&gt;

&lt;p&gt;The EU AI Act's tamper-evident logging requirement lands around the end of 2027. The audit infrastructure you choose in the next twelve months decides whether that deadline is a paperwork exercise or a real posture. Full breakdown in my newsletter, Proof, Not Promises.  &lt;/p&gt;

&lt;p&gt;What evidence are you collecting for your agents today, and would it survive an auditor who does not trust your logs?  &lt;/p&gt;

&lt;h1&gt;
  
  
  AIGovernance #ConfidentialComputing #OpenStandards #EUAIAct #TRACE
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>security</category>
    </item>
    <item>
      <title>Every regulated AI deployment hits the same wall: prove the agent handled our data...</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Thu, 02 Jul 2026 16:30:22 +0000</pubDate>
      <link>https://dev.to/mosiddi/every-regulated-ai-deployment-hits-the-same-wall-prove-the-agent-handled-our-data-4dln</link>
      <guid>https://dev.to/mosiddi/every-regulated-ai-deployment-hits-the-same-wall-prove-the-agent-handled-our-data-4dln</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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQERZGFU2OI-qQ%2Farticle-cover_image-shrink_720_1280%2FB56Z8jisasIoAQ-%2F0%2F1783007725554%3Fe%3D2147483647%26v%3Dbeta%26t%3Dtwb79p8m55nPMfLOCqTW2m8AZQ4yTPoxYHzpXKp6fJ4" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQERZGFU2OI-qQ%2Farticle-cover_image-shrink_720_1280%2FB56Z8jisasIoAQ-%2F0%2F1783007725554%3Fe%3D2147483647%26v%3Dbeta%26t%3Dtwb79p8m55nPMfLOCqTW2m8AZQ4yTPoxYHzpXKp6fJ4" width="1280" height="720"&gt;&lt;/a&gt;&lt;br&gt;
Edition 02 of Proof, Not Promises is live. Every regulated AI deployment hits the same wall: prove the agent handled our data according to policy. Today that proof is a PDF. Here is what replaces it.  &lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.linkedin.com/pulse/how-do-you-prove-ai-agent-did-what-said-imran-siddique-cdabc/?trackingId=Dra%2BcoBKTFCdFHtf9qPn%2Fw%3D%3D" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/how-do-you-prove-ai-agent-did-what-said-imran-siddique-cdabc/?trackingId=Dra%2BcoBKTFCdFHtf9qPn%2Fw%3D%3D&lt;/a&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  AIGovernance #ConfidentialComputing #OpenStandards #EUAIAct #TRACE
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>A signed JWT proves who called your API. It proves nothing about the agent that made the call. Not which system prompt...</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Mon, 29 Jun 2026 21:20:55 +0000</pubDate>
      <link>https://dev.to/mosiddi/a-signed-jwt-proves-who-called-your-api-it-proves-nothing-about-the-agent-that-made-the-call-not-7lm</link>
      <guid>https://dev.to/mosiddi/a-signed-jwt-proves-who-called-your-api-it-proves-nothing-about-the-agent-that-made-the-call-not-7lm</guid>
      <description>&lt;p&gt;A signed JWT proves who called your API. It proves nothing about the agent that made the call.  &lt;/p&gt;

&lt;p&gt;Not which system prompt defined its behavior. Not which model version ran. Not which tools were authorized. Not whether the policy bundle in memory matches what your security team reviewed. Not whether a human approved the configuration before it shipped.  &lt;/p&gt;

&lt;p&gt;Authentication answers "who is calling." Attestation answers "is the thing running right now the thing we approved." In regulated environments, it is the second question that gets your deployment signed off, and today almost nobody can answer it with anything stronger than operator documentation.&lt;br&gt;&lt;br&gt;
Every AI agent has ten surfaces that define its full trust boundary: system prompt, policy bundle, tool manifest, model identity, RAG corpus, memory baseline, decision trace, delegation, supply chain, and human approvals. None of them have a standard attestation mechanism. Each one is an unguarded door.  &lt;/p&gt;

&lt;p&gt;Agent Manifest binds all ten into one signed, hardware-attestable record, so a third party who does not trust the operator can still prove what actually ran. Open spec, on track for the Linux Foundation, shipped last week at the Confidential Computing Summit. Full breakdown in my newsletter, Proof, Not Promises.  &lt;/p&gt;

&lt;p&gt;If you are deploying agents against regulated data: which of those ten surfaces can you prove today, and which are still running on trust?  &lt;/p&gt;

&lt;h1&gt;
  
  
  AIGovernance #AgentSecurity #ConfidentialComputing #OpenStandards #AgentManifest
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>api</category>
      <category>security</category>
    </item>
    <item>
      <title>New edition of Proof, Not Promises is live.</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Mon, 29 Jun 2026 15:11:58 +0000</pubDate>
      <link>https://dev.to/mosiddi/new-edition-of-proof-not-promises-is-live-4l5h</link>
      <guid>https://dev.to/mosiddi/new-edition-of-proof-not-promises-is-live-4l5h</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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQE_i4CxsrZxUw%2Farticle-cover_image-shrink_720_1280%2FB56Z8T5fO6GsAQ-%2F0%2F1782745265413%3Fe%3D2147483647%26v%3Dbeta%26t%3DVg_FEXz36gNhhtkMP9QgbhKk4z0vR-ATVqtunuhFRZU" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5612AQE_i4CxsrZxUw%2Farticle-cover_image-shrink_720_1280%2FB56Z8T5fO6GsAQ-%2F0%2F1782745265413%3Fe%3D2147483647%26v%3Dbeta%26t%3DVg_FEXz36gNhhtkMP9QgbhKk4z0vR-ATVqtunuhFRZU" width="1280" height="720"&gt;&lt;/a&gt;&lt;br&gt;
New edition of Proof, Not Promises is live.  &lt;/p&gt;

&lt;p&gt;Here: &lt;a href="https://www.linkedin.com/pulse/prove-what-your-agent-just-who-called-imran-siddique-xtyuc/?trackingId=0NWBZruyTrSojWvmpDzYLw%3D%3D" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/prove-what-your-agent-just-who-called-imran-siddique-xtyuc/?trackingId=0NWBZruyTrSojWvmpDzYLw%3D%3D&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  AIGovernance #AgentSecurity #ConfidentialComputing #OpenStandards #AgentManifest
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>[Part 5] 20 Hard Questions About AI Agent Governance That Nobody Is Asking</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Fri, 26 Jun 2026 20:36:44 +0000</pubDate>
      <link>https://dev.to/mosiddi/part-5-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-13b3</link>
      <guid>https://dev.to/mosiddi/part-5-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-13b3</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AbJ_xu2rti_yjL074" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AbJ_xu2rti_yjL074" width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your agent processes data in Region A, reasons using a model in Region B, calls a tool in Region C, and stores results in Region D, whose laws apply?&lt;/p&gt;

&lt;p&gt;As we move toward a global Agent OS, we have to face the fact that “Sovereignty” is actually two distinct problems stacked on top of each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Sovereignty Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Jurisdiction:&lt;/strong&gt; This is the physical reality of where your bits live. It’s about data residency, server location, and the local laws governing the hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating-Model Jurisdiction:&lt;/strong&gt; This is the governance framework that travels with the agent, regardless of where it’s hosted. It’s the set of rules that must apply even if the agent is operating in a “neutral” or cross-border environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Separating these is critical. You can have a sovereign deployment but a failed governance model, or a strict framework operating on insecure residency. To solve both, I built the &lt;a href="https://github.com/microsoft/agent-governance-toolkit" rel="noopener noreferrer"&gt;Agent Governance Toolkit (AGT)&lt;/a&gt; with a zero-vendor-dependency architecture. It allows for air-gapped deployments while maintaining a consistent governance layer that doesn’t drift when the agent crosses digital borders.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Illusion Delta and the Non-Deterministic OS
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://dev.to/mosiddi/20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-1gbe"&gt;Part 1&lt;/a&gt;, I introduced the &lt;strong&gt;Illusion Delta&lt;/strong&gt; , the gap between an agent’s perceived safety and its actual behavior over time. This is why the traditional OS metaphor is breaking.&lt;/p&gt;

&lt;p&gt;Traditional operating systems assume deterministic processes where functional correctness is a guarantee. &lt;strong&gt;LLM-powered agents are fundamentally non-deterministic.&lt;/strong&gt; Because an agent can declare one intent and perform another, pre-action policy gates are no longer enough. The “Illusion Delta” exists precisely because agents can deviate after the gate has opened.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Unified Architecture of Governance
&lt;/h3&gt;

&lt;p&gt;To bridge this gap, we need a unified architectural stance rather than a list of parallel features. My philosophy for the future of Agent OS is built on three legs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Observability&lt;/strong&gt; fills the determinism gap by monitoring behavior in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive Trust&lt;/strong&gt; solves the time-decay problem, adjusting permissions as observed behavior diverges from intent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Authority&lt;/strong&gt; is the load-bearing constraint that makes the other two viable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without human authority as the ultimate root of trust, observability and trust scoring have no baseline for “correctness.”&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Non-Negotiable Principle
&lt;/h3&gt;

&lt;p&gt;In the future, agents will consume governance. They will read policies, suggest optimizations, and draft new rules. But the &lt;strong&gt;super-control&lt;/strong&gt; , the ultimate authority to approve those rules, must never transfer to the agent.&lt;/p&gt;

&lt;p&gt;This is the core of the AGT project: humans set the rules, agents follow them, and no amount of agent capability should change that hierarchy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Series Wrap-Up
&lt;/h3&gt;

&lt;p&gt;These 20 questions are the roadmap for the next generation of large-scale system design.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observability&lt;/strong&gt; is the new security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust&lt;/strong&gt; is earned and adaptive, never static.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale by Subtraction&lt;/strong&gt; remains the goal: removing the complexity of manual oversight to make room for governed autonomy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building with AI agents, these questions will find you. Better to answer them now.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://www.linkedin.com/pulse/part-5-20-hard-questions-ai-agent-governance-nobody-asking-siddique-peiqc/?trackingId=1UF3iT4PpKUOpuFIYAUH9A%3D%3D" rel="noopener noreferrer"&gt;&lt;em&gt;https://www.linkedin.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>humanintheloop</category>
      <category>artificialgeneralint</category>
      <category>aiethics</category>
    </item>
    <item>
      <title>If you want to understand what Agent Governance Toolkit actually does, this is the best place to start. This video explains...</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Thu, 25 Jun 2026 20:26:09 +0000</pubDate>
      <link>https://dev.to/mosiddi/if-you-want-to-understand-what-agent-governance-toolkit-actually-does-this-is-the-best-place-to-365a</link>
      <guid>https://dev.to/mosiddi/if-you-want-to-understand-what-agent-governance-toolkit-actually-does-this-is-the-best-place-to-365a</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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD5627AQHgWYao6VM_ww%2Farticleshare-shrink_800%2FB56Z72MWztGcAY-%2F0%2F1782246895504%3Fe%3D2147483647%26v%3Dbeta%26t%3D-zjegD7soiW4zlwPBlh5WFUtyjnrn92F8d855xqG814" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD5627AQHgWYao6VM_ww%2Farticleshare-shrink_800%2FB56Z72MWztGcAY-%2F0%2F1782246895504%3Fe%3D2147483647%26v%3Dbeta%26t%3D-zjegD7soiW4zlwPBlh5WFUtyjnrn92F8d855xqG814" width="640" height="480"&gt;&lt;/a&gt;&lt;br&gt;
If you want to understand what Agent Governance Toolkit actually does, this is the best place to start. This video explains the thinking behind it better than most of what I've written.  &lt;/p&gt;

&lt;p&gt;Worth watching if you're building with agents, evaluating governance tools, or just trying to understand what responsible deployment actually looks like at the infrastructure level.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://lnkd.in/gvYHDhqy" rel="noopener noreferrer"&gt;https://lnkd.in/gvYHDhqy&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;A few things you'll see covered:  &lt;/p&gt;

&lt;p&gt;🔒 Policy evaluation at the agent boundary, not the app layer&lt;br&gt;&lt;br&gt;
📋 Audit trails that work without touching your agent code&lt;br&gt;&lt;br&gt;
⚖️ Human-in-the-loop escalation chains&lt;br&gt;&lt;br&gt;
🛡️ Sandbox enforcement with command denylists&lt;br&gt;&lt;br&gt;
🌐 Python, TypeScript, .NET, Rust, Go — all supported  &lt;/p&gt;

&lt;p&gt;Open source, MIT licensed.  &lt;/p&gt;

&lt;h1&gt;
  
  
  AgentGovernance #AIAgents #ResponsibleAI #OpenSource #AIInfrastructure #MultiAgentSystems #LLMOps #AICompliance #AgentGovernanceToolkit #AIEngineering
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>[Part 4] 20 Hard Questions About AI Agent Governance That Nobody Is Asking</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Tue, 02 Jun 2026 20:02:34 +0000</pubDate>
      <link>https://dev.to/mosiddi/part-4-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-2l90</link>
      <guid>https://dev.to/mosiddi/part-4-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-2l90</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AQdlHMAJT7PnZULSL" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AQdlHMAJT7PnZULSL" width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 4: The Next SolarWinds Will Be an MCP Server
&lt;/h3&gt;

&lt;p&gt;The agent supply chain is currently in a “pre-SolarWinds” era. While we are seeing an explosion in agentic capabilities, the security infrastructure is lagging behind.&lt;/p&gt;

&lt;p&gt;The early telemetry from 2026 is a wake-up call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;492&lt;/strong&gt; exposed Model Context Protocol (MCP) servers have been discovered in recent scans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1,184+&lt;/strong&gt; malicious skill packages are already circulating in open repositories.&lt;/li&gt;
&lt;li&gt;Remote code execution (RCE) via tool metadata is no longer a theoretical risk; it’s a verified vulnerability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are currently doing “trust-on-first-use” for many agentic tools. That is the equivalent of running npm packages without checking signatures. It isn’t a matter of if a major supply chain attack happens through an agent tool, but when.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Governing the Supply Chain
&lt;/h3&gt;

&lt;p&gt;In building the &lt;strong&gt;Agent Governance Toolkit (AGT),&lt;/strong&gt; I’ve focused on a tiered defense strategy to secure this “negative space”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shift-Left Governance:&lt;/strong&gt; We must validate tool definitions and MCP server configurations during the CI/CD process, catching violations before they ever reach production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MCP Governance Proxy:&lt;/strong&gt; A deterministic enforcement layer that intercepts every tools/call. If the call doesn’t match a pre-approved signature or violates a safety constraint, the execution is blocked instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Trust for Tools:&lt;/strong&gt; Treat every third-party MCP server as untrusted by default. Governance must sit as a kernel-level layer between the reasoning model and the tool execution environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. We Need a “Decision BOM”
&lt;/h3&gt;

&lt;p&gt;Software has SBOMs (Software Bill of Materials) to track dependencies. Autonomous systems need a Decision BOM, a verifiable, immutable record that traces a decision back to its root signals.&lt;/p&gt;

&lt;p&gt;A Decision BOM allows you to audit the entire chain of thought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Model:&lt;/strong&gt; Which version and reasoning trace was used?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Retrieved Context:&lt;/strong&gt; What specific data (RAG) grounded the decision?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tool Outputs:&lt;/strong&gt; Which external data points influenced the next step?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Policies:&lt;/strong&gt; Which specific rules were active at the millisecond of execution?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the foundation of root cause analysis. When an agent fails, you shouldn’t be guessing why; you should be auditing the Decision BOM.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Debugging Architectures, Not Just Prompts
&lt;/h3&gt;

&lt;p&gt;Today, when an agent makes a mistake, the reflex is to “fix the prompt.” But in a complex supply chain, the failure is often architectural, a poisoned context, a compromised tool, or a logic collision between agents.&lt;/p&gt;

&lt;p&gt;By implementing a Decision BOM, we move from reactive prompt engineering to proactive &lt;strong&gt;Forensic Engineering&lt;/strong&gt;. This is the next frontier for AGT: making the “why” behind every agent action transparent, deterministic, and tamper-proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;In Part 5, we look at the map: &lt;strong&gt;Sovereignty and Jurisdiction&lt;/strong&gt;. Where does “reasoning” actually happen, and whose laws apply when an agent processes data across digital borders?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://www.linkedin.com/pulse/part-4-20-hard-questions-ai-agent-governance-nobody-asking-siddique-difkc/?trackingId=xR6cgolXIsdcAXblfioHLA%3D%3D" rel="noopener noreferrer"&gt;&lt;em&gt;https://www.linkedin.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>decisionbom</category>
      <category>agentgovernancetoolk</category>
      <category>agentos</category>
      <category>agt</category>
    </item>
    <item>
      <title>[Part 3] 20 Hard Questions About AI Agent Governance That Nobody Is Asking</title>
      <dc:creator>Imran Siddique</dc:creator>
      <pubDate>Tue, 02 Jun 2026 19:59:44 +0000</pubDate>
      <link>https://dev.to/mosiddi/part-3-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-3meb</link>
      <guid>https://dev.to/mosiddi/part-3-20-hard-questions-about-ai-agent-governance-that-nobody-is-asking-3meb</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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2A6FsvoF-sTGisZjU9" 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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2A6FsvoF-sTGisZjU9" width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 3: Who Controls the Money (And Who Is Liable)?
&lt;/h3&gt;

&lt;p&gt;Agents are no longer just “chatting.” They are transacting. Stripe payments, autonomous procurement, and automated cloud resource allocation are the new baseline. But the industry’s financial governance for agents is currently a blank page.&lt;/p&gt;

&lt;p&gt;It is not enough to ask, “Can this agent call the payment API?” We’ve solved that. The real question is: “ &lt;strong&gt;Should this agent spend $50,000 on cloud compute at 2 AM without human escalation?&lt;/strong&gt; ”&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Financial Governance is Tool Call Parameter Governance
&lt;/h3&gt;

&lt;p&gt;We must move beyond binary tool permissions toward parameter-level policies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Old Way:&lt;/strong&gt; “The agent has permission to use the Stripe Tool.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The AGT Way:&lt;/strong&gt; “The agent can call the Stripe Tool, but the amount parameter cannot exceed $X, and the recipient must be on a pre-approved whitelist. Anything else triggers a hard block.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the &lt;strong&gt;Agent Governance Toolkit (AGT),&lt;/strong&gt; cost is a first-class citizen. We prioritize deterministic caps (hard budget limits) first, using non-deterministic anomaly detection only as a secondary fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Human-in-the-loop is a 2026 Fiction
&lt;/h3&gt;

&lt;p&gt;The EU AI Act and global safety standards often mandate “human oversight.” But let’s look at the &lt;strong&gt;Manager’s Math:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AGT benchmarks show &lt;strong&gt;47,000 governed actions per second&lt;/strong&gt; across 1,000 concurrent agents. No human, no matter the team size, can “oversee” that in real-time. If you put a human in the hot path of an autonomous system, you aren’t governing; you’re bottlenecking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Evolution:&lt;/strong&gt; We must move from Human-in-the-loop to &lt;strong&gt;Human-over-the-loop:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Humans define the boundaries:&lt;/strong&gt; We set the policies and constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humans monitor the health:&lt;/strong&gt; We build dashboards for system-wide SLOs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humans investigate the anomalies:&lt;/strong&gt; We respond to alerts, not individual actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the same maturation process we saw in infrastructure. We don’t approve every packet in a firewall; we set the rules and monitor the telemetry. Agent governance must follow the same path.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. AGT as the Underwriting Layer for AI Insurance
&lt;/h3&gt;

&lt;p&gt;Insurance giants like &lt;strong&gt;Munich Re, Armilla AI,&lt;/strong&gt; and &lt;strong&gt;Coalition&lt;/strong&gt; are entering the AI liability space. However, premiums remain volatile because they lack standardized governance telemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AGT produces exactly what they need:&lt;/strong&gt; Append-only, hash-chained, tamper-evident audit trails with full action attribution.&lt;/p&gt;

&lt;p&gt;This isn’t just a log; it’s &lt;strong&gt;Underwriting Data&lt;/strong&gt;. By showing insurance companies exactly how policies were enforced and how trust scores evolved over time, we build the necessary bridge between technical telemetry and actuarial models.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Who is Liable for the “Bug”?
&lt;/h3&gt;

&lt;p&gt;When a coding agent ships a vulnerability, where does the buck stop?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;The Developer who approved the PR? *&lt;/em&gt; Yes.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;The Company that deployed the agent? *&lt;/em&gt; Yes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Framework?&lt;/strong&gt; No. They provide tools, not decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Toolkit?&lt;/strong&gt; Only if the engine failed to enforce a set policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Liability follows the decision-maker, not the enforcement mechanism. This is why AGT puts policies &lt;strong&gt;outside&lt;/strong&gt; the toolkit. The toolkit is the enforcement engine; the user is the policy author. Liability stays with the human who defines what “Safe” looks like.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;In Part 4, we face the supply chain. The next SolarWinds won’t be a library; it will be a malicious &lt;strong&gt;MCP Server.&lt;/strong&gt; We’ll talk about the “Decision BOM” and how to trace the root cause of a failed agent decision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://www.linkedin.com/pulse/part-3-20-hard-questions-ai-agent-governance-nobody-asking-siddique-oacgc/?trackingId=fIff%2BYPStJoFIci2g%2FVV3w%3D%3D" rel="noopener noreferrer"&gt;&lt;em&gt;https://www.linkedin.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>decisionbom</category>
      <category>agentmesh</category>
      <category>agentos</category>
      <category>agt</category>
    </item>
  </channel>
</rss>
