Introducing run-assert-eval: Find the risk, fix it, prove it Microsoft introduced run-assert-eval, a VS Code skill that discovers risks for a given AI agent, measures failure rates, generates runtime policy from those findings, and reruns the same evaluation to prove whether the fix worked. In the walkthrough example, a billing-support agent disclosed another customer's data in 12 of 40 applicable baseline conversations (30.0%), dropping to two violations in 34 applicable conversations (5.9%) in the governed run, with no permissible-behavior violations in that sample. The skill builds on Microsoft's June releases of ASSERT, which turns written requirements into evaluations, and the Agent Control Specification for enforcing policy at agent action points. Governing AI agents at runtime is still a new discipline, and over the past few months, we’ve been building its foundations in the open. In June, we released ASSERT https://commandline.microsoft.com/assert-written-intent-executable-evals/ , which turns written requirements into rigorous evaluations, and Agent Control Specification https://commandline.microsoft.com/agent-control-specification-runtime-governance/ , which gives teams a portable way to enforce policy at the points where agents act. In August, we showed how the two work together https://commandline.microsoft.com/safety-requirements-failure-paths-assert-acs/ as a single practice, in which a team evaluates its agent against its requirements, applies a control, freezes the test set, and measures both safety and helpfulness before and after the change. That practice rests on two assumptions that don’t always hold. The first is that a team’s written requirements already capture the risks that matter, when in reality, the most consequential failures are often the ones no one thought to write down. The second is that someone has the time and expertise to connect every step by hand, translating findings into policy and rebuilding the comparison without compromising it. As more teams adopt these tools, both assumptions are becoming harder to rely on. Today, we’re introducing run-assert-eval https://aka.ms/assert-acs-skill , a skill designed to remove both of those assumptions. From a single prompt in VS Code, it discovers the risks that matter for a given agent, measures how often the agent fails, generates runtime policy directly from those findings, and reruns the same evaluation to prove whether the fix worked. In the example we walk through below, a billing-support agent disclosed another customer’s data in 12 of 40 applicable baseline conversations, an observed rate of 30.0%. In the governed run, we observed two violations in 34 applicable conversations, or 5.9%, and no permissible-behavior violations in that sample. Starting before the requirements Because this work is new, a brief recap is useful for readers meeting it here for the first time. Our first post on Command Line introduced ASSERT https://commandline.microsoft.com/assert-written-intent-executable-evals/ , which rests on the principle that written intent should be a primary input to evaluation. The behaviors an agent must respect are shaped by its product context, its policies, and its tools, and the evaluation should be generated from those requirements rather than borrowed from generic metrics. The second introduced Agent Control Specification https://commandline.microsoft.com/agent-control-specification-runtime-governance/ , an open and vendor-neutral standard that defines where and how runtime governance is applied so that the enforcement contract doesn’t need to be rewritten every time a framework or policy engine changes. In August, “ One requirement, many failure paths https://commandline.microsoft.com/safety-requirements-failure-paths-assert-acs/ ” showed how the two work together in practice. Using a banking-support agent, that post demonstrated how a single requirement can fail along many paths, and how a team can close those paths one control at a time by freezing the test set, changing one thing, and measuring safety and helpfulness together. That discipline answers the question a team must be able to sign off on before it ships, which is whether the control it wrote fixed the failure it measured, and at what cost to the agent’s usefulness. Each of those posts, however, began from requirements a team had already written down. That’s a sound starting point, but written requirements are only as complete as the list of risks someone thought to include, and the most consequential failures are often the ones no one anticipated. Clarity https://github.com/microsoft/clarity-agent/ addresses that limitation by threat modeling the agent before anything is measured, so the process begins with the failure modes a team didn’t foresee as well as the ones it did. run-assert-eval places Clarity at the front of the loop and connects it to everything that follows, so the discipline we described in August can begin with discovery rather than assumption. What we saw developers doing Clarity, ASSERT, and ACS were each designed to be useful independently, and given how new they are, we didn’t expect developers to begin combining them so quickly. In the months since Build 2026, we’ve watched teams threat model an agent with Clarity, pass the results to ASSERT to measure how often the agent fails, write an ACS policy to address the gap, and then rerun ASSERT to determine whether the policy held. This was the workflow we had hoped teams would arrive at, but it came with a significant amount of manual integration. Every connection in the diagram above is work that a developer has to build and maintain, whether that means: - Translating failure modes into an evaluation config - Authoring and validating a Rego rule - Regenerating a test set for the second run Each of those handoffs is an opportunity to lose context, and more importantly, an opportunity for the comparison between the original agent and the governed agent to lose its integrity. When the second run uses new test cases and a new judge, an improvement in the results might reflect the policy, or it might simply reflect a different test, and at that point a team no longer has evidence so much as two unrelated measurements presented side by side. One prompt, one loop This new skill, run-assert-eval, handles that integration and, just as importantly, protects the validity of the comparison. 1. A developer describes the agent in plain language 2. The skill then discovers risks with Clarity, converts the selected risks into measurable behaviors with ASSERT, generates and validates an ACS policy from the findings, and reruns the original evaluation against the governed agent The behavior definition, the test cases, and the judge all remain constant throughout, which means the ACS policy is the only thing that changes between the two runs as an intended intervention. The loop in action The best way to understand the loop is to see it applied to a real agent, so the rest of this post follows run-assert-eval as it evaluates and governs a billing support agent from start to finish. The agent is designed to serve a single customer account, ACME-1001, and it should never read or act on any other account. The same run is also available as a video walkthrough: Your AI Agent Leaks Customer Data. Here’s How to Fix It. https://www.youtube.com/watch?v=w2kyM8qbpUA Step 1: Begin with discovery rather than assumption When teams write evaluations by hand, they tend to start with the first risk that comes to mind, and that risk is often the one the agent was already designed to handle. For that reason, the skill doesn’t move directly from an agent description to a generated evaluation and instead treats discovery as a prerequisite for measurement. The skill first checks the repository for a .clarity-protocol/ directory. When it finds none, it calls the Clarity MCP server in sequence, running run clarity , then write protocol document , and then record failure , and writes the resulting package into the repository: .clarity-protocol/ failures/failures.md every mode, severity-ranked each: Summary, Variants