<?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: Holger Imbery</title>
    <description>The latest articles on DEV Community by Holger Imbery (@holgerimbery).</description>
    <link>https://dev.to/holgerimbery</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%2F2736716%2Fa3ddf62e-8581-4eea-b140-b3fc2121c057.png</url>
      <title>DEV Community: Holger Imbery</title>
      <link>https://dev.to/holgerimbery</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/holgerimbery"/>
    <language>en</language>
    <item>
      <title>Multi-Agent Orchestration with Copilot Studio — Part 3: The Build 2026 Rebuild</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-3-the-build-2026-rebuild-3pad</link>
      <guid>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-3-the-build-2026-rebuild-3pad</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede.&lt;/strong&gt; This is the third of three articles in the multi-agent orchestration series. Where Parts 1 and 2 cover the released, generally available Copilot Studio — the classic model built on generative orchestration — Part 3 turns to the rebuilt experience Microsoft introduced at Build 2026. At Build 2026 (June 2–3) and in the &lt;em&gt;“Meet the new Copilot Studio”&lt;/em&gt; post that followed on June 9, Microsoft shipped a rebuilt Copilot Studio: a streamlined four-surface agent model (Skills, Tools, Knowledge, Connected agents) plus a Memory surface, a new agentic orchestrator built on a coding-harness and CLI layer, a redesigned workflow designer, and a deeper convergence with Microsoft Foundry under a shared knowledge layer called Microsoft IQ. Parts 1 and 2 describe the &lt;em&gt;classic&lt;/em&gt; model — the five surfaces, child agents, the four patterns — which still ships and is fully supported. Part 3 describes what replaces it as the default forward path, what is genuinely new, and what carries over unchanged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About this series.&lt;/strong&gt; This is Part 3 of three. &lt;strong&gt;Part 1 — Foundations&lt;/strong&gt; establishes the vocabulary, when to split a single agent, the five configuration surfaces, the four orchestration patterns, and how MCP and A2A are configured. &lt;strong&gt;Part 2 — In Practice&lt;/strong&gt; turns those decisions into four end-to-end scenarios, a starter MCP server inventory, and ten production anti-patterns. Parts 1 and 2 describe the &lt;strong&gt;released, generally available feature set&lt;/strong&gt; — the “classic” Copilot Studio experience, built on &lt;strong&gt;generative orchestration&lt;/strong&gt; , which is GA and fully supported. &lt;strong&gt;Part 3 — The Build 2026 Rebuild&lt;/strong&gt; (this article) describes the new four-surface model (Skills, Memory, a new orchestrator); those features are &lt;strong&gt;in public preview and subject to change&lt;/strong&gt; before general availability. Read Part 3 as forward-looking: surface names, behaviors, and availability may be adjusted before GA, so verify the current status before committing a production design to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status, stated plainly.&lt;/strong&gt; The new experience is in &lt;strong&gt;public preview&lt;/strong&gt;. It is available in production environments worldwide, and Microsoft’s own post says it is “ready to create agents for production use.” Still, the same post includes an explicit correction: the features are in public preview, not generally available. The new and classic experiences &lt;strong&gt;coexist&lt;/strong&gt; — you opt into the new one with “Try now” on the Copilot Studio homepage, and your classic agents keep working. Treat everything in this article as a preview unless noted, and re-check the status before committing a production design to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update since Parts 1 &amp;amp; 2 were published.&lt;/strong&gt; A few developments since those articles went out, re-verified against Microsoft Learn as of mid-July 2026. The &lt;strong&gt;Windows 365 for Agents MCP server&lt;/strong&gt; is now &lt;strong&gt;generally available&lt;/strong&gt; , giving an agent full operational control over a Windows 365 cloud PC — desktop interaction, browser automation, and semantic UI inspection — extending the Computer Use / computer-using-agent thread from Part 2’s IT-triage scenario. The &lt;strong&gt;classic experience remains fully supported, and nothing in the rebuild is deprecated&lt;/strong&gt; , so Parts 1 and 2 remain the accurate reference for classic agents. And the two time-sensitive facts those articles turn on still hold: &lt;strong&gt;A2A reached general availability in April 2026&lt;/strong&gt; , and &lt;strong&gt;CVE-2026-21520 (“ShareLeak,” CVSS 7.5)&lt;/strong&gt; remains the relevant indirect-prompt-injection disclosure — patched in January 2026, publicly disclosed in April 2026 — with no newer CVE superseding it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why read this&lt;/strong&gt; Read this if you read Parts 1 and 2, opened Copilot Studio, and found a different product than the one those articles described — four tabs instead of nine, “Skills” where you expected child agents, a “Memory” surface that wasn’t there before, and a chat that references Markdown files. Nothing in Parts 1 and 2 is wrong for the classic experience, but the vocabulary has moved. This article reconciles the two: it maps the classic five surfaces onto the new four-plus-Memory model, explains what “Skills” now means (and the naming trap that comes with it), and shows that the four orchestration patterns survive the change intact. Read it before you start a new build in the new experience, so you pick the right surface for each piece from the start.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. What changed, in one paragraph
&lt;/h2&gt;

&lt;p&gt;Copilot Studio used to present an agent as nine configuration tabs and a mental model of five surfaces — Instructions, Knowledge, Tools, Topics, Triggers — with child agents and connected agents as the two ways to compose with it. The rebuilt experience collapses that to &lt;strong&gt;four surfaces — Skills, Tools, Knowledge, Connected agents — plus a Memory surface in preview&lt;/strong&gt; , driven by a new orchestrator that behaves much more like a coding agent than a dialog engine. “Skills” is the headline change: agent behavior is now authored as &lt;strong&gt;reusable Markdown that loads on demand&lt;/strong&gt; , in the same &lt;code&gt;SKILL.md&lt;/code&gt; style used by GitHub Copilot and Claude Code — and Copilot Studio can import those existing skills directly. Child agents, as a distinct surface, are absent from the new model; their two jobs are absorbed by Skills (factoring behavior into a single agent) and Connected agents (collaboration across agents). Underneath, Copilot Studio and Microsoft Foundry are converging on a single runtime and knowledge layer (Microsoft IQ), so a low-code Copilot Studio agent and a pro-code Foundry agent can act as peers.&lt;/p&gt;

&lt;p&gt;The rest of this article unpacks each of those, with the classic-to-new mapping made explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. From nine tabs to four surfaces
&lt;/h2&gt;

&lt;p&gt;The most visible change is the reduction from nine configuration tabs to four, with the essential configuration brought to the front. The new agent surfaces are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; — define behaviors through structured instructions, authored as Markdown and loaded on demand. (This is new; see §3.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — connect the agent to external systems and actions: connectors, Power Automate flows, MCP servers, and now Work IQ MCP tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge&lt;/strong&gt; — provide trusted context to guide decisions: SharePoint, Dataverse, files, Graph connectors, and so on. In the new experience, &lt;strong&gt;Microsoft IQ&lt;/strong&gt; sources plug in here too — &lt;strong&gt;Work IQ&lt;/strong&gt; (Microsoft 365 org data), &lt;strong&gt;Fabric IQ&lt;/strong&gt; (Fabric business data and analytics), and &lt;strong&gt;Foundry IQ&lt;/strong&gt; &lt;em&gt;(preview)&lt;/em&gt;, which ground the agent on enterprise knowledge bases indexed by Azure AI Search in Azure AI Foundry. (See §5.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connected agents&lt;/strong&gt; — collaborate across agents to complete work (Copilot Studio agents, plus external agents over A2A, and Microsoft Foundry / Fabric / M365 Agents SDK agents in preview).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Plus, in preview, a fifth surface:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory (preview)&lt;/strong&gt; — remember interactions, workflows, and context for improved results across sessions. (See §5.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mapping this back to the classic five surfaces from Part 1:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Classic surface (Parts 1–2)&lt;/th&gt;
&lt;th&gt;Where it lives in the new model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instructions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Largely subsumed by &lt;strong&gt;Skills&lt;/strong&gt; — base instructions remain, but reusable behavior moves into load-on-demand markdown skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Knowledge&lt;/strong&gt; — unchanged in concept&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — unchanged in concept, now including Work IQ MCP tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Topics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;De-emphasized — the new orchestrator reduces the need for hand-authored topic trees; deterministic logic moves into &lt;strong&gt;workflows&lt;/strong&gt; (see §6). Topics remain in the classic experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Triggers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Still present for autonomous/event-driven runs; less prominent in the streamlined surface set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Child agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Removed as a surface&lt;/strong&gt; — folded into Skills (in-agent behavior) and Connected agents (cross-agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Connected agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Connected agents&lt;/strong&gt; — unchanged in concept&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;(new)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Memory (preview)&lt;/strong&gt; — persistent cross-session understanding&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The practical effect is that the new model pushes you toward two clean compositional choices — &lt;strong&gt;Skills&lt;/strong&gt; for what one agent should know how to do, and &lt;strong&gt;Connected agents&lt;/strong&gt; for handing work to another agent — instead of the older three-way split that included child agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Skills: behavior as load-on-demand markdown
&lt;/h2&gt;

&lt;p&gt;In the rebuilt experience, &lt;strong&gt;Skills&lt;/strong&gt; are &lt;em&gt;“reusable instructions in Markdown that can load on demand for completing specific tasks,”&lt;/em&gt; and — importantly — you can &lt;em&gt;“import skills you already have, including existing GitHub Copilot or Claude Code skills.”&lt;/em&gt; That single sentence is the most consequential change in the release.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this actually is
&lt;/h3&gt;

&lt;p&gt;A skill in this sense is the &lt;strong&gt;&lt;code&gt;SKILL.md&lt;/code&gt; pattern&lt;/strong&gt; : a Markdown file with light frontmatter (a &lt;code&gt;name&lt;/code&gt; and a &lt;code&gt;description&lt;/code&gt; of when to use it) and a Markdown body of instructions, examples, and guidelines. The orchestrator reads the descriptions and &lt;strong&gt;loads the full skill body only when a task needs it&lt;/strong&gt; — progressive disclosure, rather than stuffing every rule into one always-on instruction block. This is the same convention that GitHub Copilot and Claude Code use for agent skills, and Copilot Studio now supports it natively, including the ability to import skills authored for those tools. You author a skill once, add it to multiple agents, and can export it as a Markdown file or package to share — the reusable-library model those coding tools already use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters for everything in Parts 1 and 2
&lt;/h3&gt;

&lt;p&gt;Two of the recurring lessons in the earlier articles were “keep the instruction block small” (Part 1’s 8,000-character limit) and “factor complexity into child agents.” Skills address both more directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The instruction-bloat problem.&lt;/strong&gt; Instead of one monolithic instruction block bumping the 8,000-character ceiling, behavior is split into focused skills that load only when relevant. The “god agent” anti-pattern (Part 2, anti-pattern 1) gets a native remedy at the instruction layer, not only at the agent layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The child-agent use case.&lt;/strong&gt; Part 1 used child agents to “factor complexity inside one parent.” That job is now a &lt;strong&gt;skill&lt;/strong&gt; , not a sub-agent. You no longer create a child agent named “Validate Expense Code”; you write a &lt;code&gt;validate-expense-code&lt;/code&gt; skill that loads when needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The naming trap — two different “skills”
&lt;/h3&gt;

&lt;p&gt;Be careful: Copilot Studio now has &lt;strong&gt;two unrelated things called “skills.” ** **&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Classic skills&lt;/strong&gt; (still on Microsoft Learn) — a deployed Bot Framework / Microsoft 365 Agents SDK &lt;em&gt;bot&lt;/em&gt;, registered as an agent via a &lt;strong&gt;manifest URL&lt;/strong&gt; , used for complex multi-turn server-side scenarios. Pro-code, registered under Settings → Skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New skills&lt;/strong&gt; (the rebuilt experience) — ** Markdown instruction modules** (&lt;code&gt;SKILL.md&lt;/code&gt; style) that load on demand—Low-code, authored or imported as files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are different concepts with the same name. When you read “skills” in the documentation, check whether it means a manifest-registered bot or a Markdown behavior module. This article uses the &lt;strong&gt;new markdown&lt;/strong&gt; format unless it says otherwise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design guidance for skills
&lt;/h3&gt;

&lt;p&gt;The Part 1 guidance about tool descriptions transfers almost verbatim to skill descriptions: the &lt;strong&gt;description is what the orchestrator routes on&lt;/strong&gt;. A skill described as “Expense logic” will be loaded unpredictably; a skill described as “Validates an expense code against the FY26 policy matrix; use when the user submits or questions an expense line” will load when it should. Keep each skill narrow, name it for one job, and write the description for the router, not for a human reader.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The new agentic orchestrator
&lt;/h2&gt;

&lt;p&gt;The surface changes sit atop a new engine. Microsoft describes a &lt;strong&gt;new agentic orchestrator&lt;/strong&gt; &lt;em&gt;“built on a new coding harness and CLI layer,”&lt;/em&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stronger instruction adherence&lt;/strong&gt; — agents follow their instructions and skills more reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-horizon task execution&lt;/strong&gt; and &lt;strong&gt;recursive task execution&lt;/strong&gt; — the orchestrator can work through multi-step, dynamic problems that decompose into sub-tasks, rather than a single planning pass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large-content handling&lt;/strong&gt; and &lt;strong&gt;rich file outputs&lt;/strong&gt; — it can process large volumes of content and produce documents and data files, opening up document-generation and data scenarios that were awkward before.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For readers of Part 2, this matters in two concrete ways. First, the &lt;strong&gt;sequential pipeline&lt;/strong&gt; and &lt;strong&gt;hierarchical&lt;/strong&gt; patterns get easier, because the orchestrator itself now does long-horizon, recursive decomposition — some of what you previously assembled out of multiple agents and a Dataverse state table, the orchestrator can carry within a single agent’s run. Second, the &lt;strong&gt;“specialists are boring”&lt;/strong&gt; principle still holds, but the threshold for when you &lt;em&gt;need&lt;/em&gt; to split shifts: a single new-orchestrator agent can reliably do more before it hits the limits that forced decomposition in the classic model. The Part 1 signals for splitting (tool count, owners, conflicting knowledge, divergent SLAs) remain the right criteria; the tool-count number is just less likely to be the first wall you hit.&lt;/p&gt;

&lt;p&gt;The harness-and-CLI framing is deliberate. It is the same shape as a modern coding agent — which is also why importing GitHub Copilot and Claude Code skills works at all: the runtime is built to consume that ecosystem’s conventions.&lt;/p&gt;

&lt;p&gt;On the model side, the new experience lets you pick the orchestrator’s primary model directly: &lt;strong&gt;Claude Sonnet 5&lt;/strong&gt; and &lt;strong&gt;GPT-5.5 Chat&lt;/strong&gt; are now generally available choices. Hence, the instruction-adherence gains come from both the new harness and a current-generation model underneath it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Memory and Microsoft IQ
&lt;/h2&gt;

&lt;p&gt;The new &lt;strong&gt;Memory&lt;/strong&gt; surface (preview) — &lt;em&gt;“remember interactions, workflows and context for improved results”&lt;/em&gt; — is the agent-facing edge of a larger platform layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Work IQ and its three layers
&lt;/h3&gt;

&lt;p&gt;On Microsoft Learn, &lt;strong&gt;Work IQ (preview)&lt;/strong&gt; is described as &lt;em&gt;“the intelligence layer that grounds Microsoft 365 Copilot and your agents in real-time, shared context across your organization.”&lt;/em&gt; It is built on three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data&lt;/strong&gt; — unifies signals from files, emails, meetings, chats, and business systems across Microsoft 365 to capture how work actually happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; — &lt;em&gt;“builds persistent understanding of how people and teams work, enabling Agent 365–managed agents to stay aligned to priorities and remain consistent across tasks, apps, and sessions.”&lt;/em&gt; This is the layer behind the agent &lt;strong&gt;Memory&lt;/strong&gt; surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference&lt;/strong&gt; — brings together models, skills, and tools so agents can reason and act, using Work IQ MCP tools, under the Agent 365 control plane.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You add Work IQ to an agent as &lt;strong&gt;Work IQ MCP tools&lt;/strong&gt; (Tools → Add tool → Model Context Protocol → e.g., &lt;em&gt;Work IQ Mail&lt;/em&gt;, &lt;em&gt;Work IQ Calendar&lt;/em&gt;, &lt;em&gt;Work IQ Teams&lt;/em&gt;). It requires a Microsoft 365 Copilot license. Work IQ in Copilot Studio is &lt;strong&gt;preview-only today, with general availability “coming soon”&lt;/strong&gt; ; Microsoft’s documentation states that once Work IQ reaches GA, the &lt;strong&gt;Work IQ API transitions to a usage-based (consumptive) billing model&lt;/strong&gt; — so that billing is not yet in effect. Governance runs through Agent 365 and the Microsoft 365 admin center (admins allow or block servers tenant-wide), with tool-call tracing in Microsoft Defender Advanced Hunting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft IQ — the umbrella
&lt;/h3&gt;

&lt;p&gt;Work IQ is one of three “IQ” layers under the broader &lt;strong&gt;Microsoft IQ&lt;/strong&gt; banner introduced around Build 2026. In the new Copilot Studio experience, Microsoft Learn documents Microsoft IQ as a context layer with &lt;strong&gt;three sources&lt;/strong&gt; : &lt;strong&gt;Work IQ&lt;/strong&gt; (Microsoft 365 org data — emails, chats, files, calendar, people — routed through the Agent 365 MCP gateway), &lt;strong&gt;Fabric IQ&lt;/strong&gt; (business data and analytics in Microsoft Fabric), and &lt;strong&gt;Foundry IQ&lt;/strong&gt; &lt;em&gt;(preview)&lt;/em&gt;, which grounds the agent on enterprise knowledge bases indexed by Azure AI Search in Azure AI Foundry. Turning on a Microsoft IQ source gives the agent both read access (knowledge) and actions (tools), always within the signed-in user’s permissions. Both Copilot Studio and Foundry draw on the same Microsoft IQ layer, which is part of what enables the convergence in §7. (Some Build 2026 community write-ups group the family differently — e.g., Work IQ / Foundry IQ / Web IQ; the Copilot Studio documentation itself lists Work IQ / Fabric IQ / Foundry IQ.)&lt;/p&gt;

&lt;h3&gt;
  
  
  How Memory changes the hierarchical pattern
&lt;/h3&gt;

&lt;p&gt;Part 2’s employee-onboarding scenario leaned on a Dataverse &lt;code&gt;OnboardingCase&lt;/code&gt; table because “if the process outlives the conversation, so should the state.” Memory does not replace that — durable, queryable business state still belongs in Dataverse — but it changes what you have to encode by hand. Memory carries &lt;em&gt;understanding of how people and teams work&lt;/em&gt; across sessions, so the agent retains continuity (priorities, prior interactions) without you modeling every bit of it as a table column. The rule of thumb: &lt;strong&gt;structured process state → Dataverse; learned context and continuity → Memory.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The new workflow designer
&lt;/h2&gt;

&lt;p&gt;Part 2 built its pipeline and fan-out scenarios on &lt;strong&gt;agent flows&lt;/strong&gt;. The rebuilt experience replaces that with a &lt;strong&gt;new workflow designer&lt;/strong&gt; : a single, unified visual canvas with &lt;strong&gt;node-by-node testing&lt;/strong&gt; and &lt;strong&gt;robust versioning&lt;/strong&gt; , intended to combine deterministic steps with agent intelligence in one place.&lt;/p&gt;

&lt;p&gt;The pieces that matter for the orchestration patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent nodes&lt;/strong&gt; — call an existing agent directly inside a workflow, so you get deterministic workflow execution for the predictable parts and hand off to an agent for the open-ended parts. This is the cleanest expression yet of Part 2’s “structured where needed, adaptive where valuable.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP servers in workflows (preview)&lt;/strong&gt; — workflows can call MCP-server tools directly, staying within Microsoft security, permission, and compliance boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-powered actions&lt;/strong&gt; — classification, content generation, and decision-support actions drop into a workflow as nodes, alongside a &lt;strong&gt;Microsoft 365 Copilot action node&lt;/strong&gt; (send a prompt to Microsoft 365 Copilot or a specific agent) and &lt;strong&gt;human review/approval&lt;/strong&gt; actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, the four patterns from Part 2 now have a more direct home:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Router-worker&lt;/strong&gt; → a workflow that classifies (classification action) and routes to agent nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequential pipeline&lt;/strong&gt; → a workflow with ordered nodes, each an agent node or AI action, with human-review nodes at decision points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel fan-out / fan-in&lt;/strong&gt; → parallel branches of agent nodes joined by an aggregation step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical&lt;/strong&gt; → a supervisor workflow that invokes agent nodes and persists durable state in Dataverse, now with Memory carrying cross-session continuity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The patterns did not change. The surface you build them on did.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Foundry and Copilot Studio converge
&lt;/h2&gt;

&lt;p&gt;The strategic frame from Build 2026 is that &lt;strong&gt;Microsoft Foundry and Copilot Studio are two front doors over one agent runtime&lt;/strong&gt; — Foundry, the pro-code platform (Python/.NET, SDKs, managed runtime); Copilot Studio, the low-code platform (visual designer, same governance and protocols underneath). They share three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The A2A protocol&lt;/strong&gt; , so a Foundry agent and a Copilot Studio agent can talk to each other as peers (exactly the cross-platform case Part 1 introduced A2A for).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Microsoft IQ knowledge layer&lt;/strong&gt; (Work IQ, Foundry IQ, Web IQ).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Microsoft Agent Framework (MAF)&lt;/strong&gt; — the unification of Semantic Kernel and AutoGen into one agent harness — which can host agents that either front door builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a platform team, the takeaway is the one Part 1 hinted at and this release makes literal: &lt;strong&gt;standardize on the protocol and the knowledge layer, not the build tool.&lt;/strong&gt; Let pro-code teams use Foundry and low-code teams use Copilot Studio, knowing the agents interoperate over A2A and share Microsoft IQ. The multi-agent architecture you designed in Parts 1 and 2 does not need to be re-decided for each tool; it is decided once at the protocol and knowledge layers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A sourcing note: The new-experience surfaces, Skills-as-markdown, the new orchestrator, the workflow designer, and Work IQ/Memory are documented on first-party Microsoft sources (the Copilot Studio Blog and Microsoft Learn). The broader Foundry⇄Copilot Studio convergence details — Foundry IQ, Web IQ, and the Microsoft Agent Framework’s role — are drawn from Build 2026 engineering analysis, citing Microsoft DevBlogs and Learn; treat the specific convergence mechanics as directionally confirmed and verify the parts that matter to your design. Since first drafting, two of those pieces firmed up: &lt;strong&gt;Microsoft IQ and Foundry IQ now have their own Microsoft Learn pages&lt;/strong&gt; (&lt;em&gt;Microsoft IQ overview for agents (preview)&lt;/em&gt; and &lt;em&gt;Connect to Foundry IQ from an agent (preview)&lt;/em&gt;), which document Microsoft IQ’s sources as &lt;strong&gt;Work IQ, Fabric IQ, and Foundry IQ&lt;/strong&gt; — so the &lt;strong&gt;Web IQ&lt;/strong&gt; grouping and the &lt;strong&gt;Microsoft Agent Framework’s&lt;/strong&gt; exact role are the parts that still rest on the community analysis.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  8. What to do now
&lt;/h2&gt;

&lt;p&gt;The new experience is a preview and coexists with the classic, which makes the right posture straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New builds you intend to keep:&lt;/strong&gt; start in the new experience and the four-surface model. Author behavior as &lt;strong&gt;Skills&lt;/strong&gt; (narrow, well-described markdown), use &lt;strong&gt;Connected agents&lt;/strong&gt; for cross-agent work, reserve &lt;strong&gt;Tools/Knowledge&lt;/strong&gt; for actions and context, and turn on &lt;strong&gt;Memory&lt;/strong&gt; where cross-session continuity helps. Build orchestration in the &lt;strong&gt;new workflow designer&lt;/strong&gt; with agent nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Existing classic agents:&lt;/strong&gt; leave them. They keep working, and Parts 1 and 2 remain the accurate reference for them. Migrate when you have a reason — a redesign, a new requirement, or the new orchestrator’s reliability gains — not reflexively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills you already have&lt;/strong&gt; for GitHub Copilot or Claude Code: you can import them, which makes the new model a low-friction on-ramp if your teams already author &lt;code&gt;SKILL.md&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance:&lt;/strong&gt; the Part 2 disciplines do not change — Entra Agent ID per agent, least privilege, audit through Purview/Defender, idempotency on writes, structured contracts. Work IQ and the new tools route through Agent 365 governance in the Microsoft 365 admin center; fold that into the same review process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the status.&lt;/strong&gt; This is preview. Reconfirm GA timing and any surface renames before you bet on a production rollout on the new model, and keep classic as the fallback until the new experience reaches GA for the capabilities you depend on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Parts 1 and 2 settled the architecture of multi-agent systems in Copilot Studio and showed it in execution. Part 3 is the reminder that the platform underneath an architecture moves, and that the durable parts are the ideas, not the tabs. The Build 2026 rebuild changes the surfaces — &lt;strong&gt;Skills&lt;/strong&gt; instead of sprawling instructions and child agents, a &lt;strong&gt;Memory&lt;/strong&gt; surface, a new orchestrator, a new workflow designer — but it does not change the load-bearing decisions: narrow agents with clear ownership, behavior factored into small, well-described units, structured contracts between components, state that outlives the conversation, and least-privilege governance. Skills are the new home for “factor the complexity”; Connected agents and A2A are still how agents collaborate; the four patterns still cover the work. The names on the tabs changed. The discipline did not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Copilot Studio Blog — &lt;a href="https://techcommunity.microsoft.com/blog/copilot-studio-blog/meet-the-new-copilot-studio-rebuilt-for-more-complex-multi-step-work/4526488" rel="noopener noreferrer"&gt;Meet the new Copilot Studio: rebuilt for more complex, multi-step work&lt;/a&gt; (June 9, 2026) — four-surface model, nine-to-four tabs, new agentic orchestrator, Skills as markdown (import GitHub Copilot / Claude Code skills), new workflow designer with agent nodes and MCP servers; &lt;strong&gt;public preview&lt;/strong&gt; , coexisting with classic&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/use-work-iq" rel="noopener noreferrer"&gt;Work IQ MCP overview (preview)&lt;/a&gt; — Work IQ’s Data / Memory / Inference layers, Work IQ MCP tools, Agent 365 governance; Work IQ is in preview with GA “coming soon” and usage-based Work IQ API billing taking effect at GA&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/agents-experience/use-microsoft-iq" rel="noopener noreferrer"&gt;Microsoft IQ overview for agents (preview)&lt;/a&gt; — Microsoft IQ as a context layer with three sources (Work IQ, Fabric IQ, Foundry IQ &lt;em&gt;(preview)&lt;/em&gt;); see also &lt;em&gt;Connect to Foundry IQ from an agent (preview)&lt;/em&gt; and &lt;em&gt;Turn on Microsoft IQ for an agent (preview)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/whats-new" rel="noopener noreferrer"&gt;What’s new in Copilot Studio&lt;/a&gt; — the new agent experience as “Production-ready preview” (June 2026); &lt;strong&gt;Windows 365 for Agents MCP server (GA)&lt;/strong&gt;; &lt;strong&gt;Foundry IQ&lt;/strong&gt; knowledge source &lt;em&gt;(preview)&lt;/em&gt;; &lt;strong&gt;Claude Sonnet 5&lt;/strong&gt; / &lt;strong&gt;GPT-5.5 Chat&lt;/strong&gt; primary models (GA); workflow nodes (Microsoft 365 Copilot node, prompt node, classification); Computer Use GA (May 2026); A2A GA (April 2026)&lt;/li&gt;
&lt;li&gt;Microsoft Copilot Studio Blog — &lt;a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/copilot-studio/new-and-improved-computer-using-agents-a-new-workflows-experience-and-real-time-voice-experiences/" rel="noopener noreferrer"&gt;What’s new in Copilot Studio: May 2026&lt;/a&gt; — redesigned workflows experience, agent nodes, AI-powered actions&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-use-skills" rel="noopener noreferrer"&gt;Use skills in Copilot Studio&lt;/a&gt; and &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/configuration-add-skills" rel="noopener noreferrer"&gt;Configure skills&lt;/a&gt; — the &lt;em&gt;classic&lt;/em&gt; (manifest-registered) meaning of “skills,” for disambiguation&lt;/li&gt;
&lt;li&gt;GitHub Docs — &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/add-skills" rel="noopener noreferrer"&gt;Adding agent skills for GitHub Copilot&lt;/a&gt; and &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-sdk/features/skills" rel="noopener noreferrer"&gt;Custom skills (Copilot SDK)&lt;/a&gt; — the &lt;code&gt;SKILL.md&lt;/code&gt; Markdown skill format Copilot Studio now imports&lt;/li&gt;
&lt;li&gt;Redmond Magazine — &lt;a href="https://redmondmag.com/blogs/redmond-dispatch/2026/06/microsoft-unveils-redesigned-copilot-studio.aspx" rel="noopener noreferrer"&gt;Microsoft Unveils Redesigned Copilot Studio for Complex AI Agent Workflows&lt;/a&gt; (June 9, 2026) — independent coverage of the rebuild&lt;/li&gt;
&lt;li&gt;Build 2026 engineering analysis (community, citing Microsoft DevBlogs/Learn) — &lt;a href="https://www.linkedin.com/pulse/microsoft-foundry-copilot-studio-build-2026-satyanarayana-padidapu-2djfc" rel="noopener noreferrer"&gt;Microsoft Foundry &amp;amp; Copilot Studio at Build 2026&lt;/a&gt; — one-runtime / two-front-doors convergence, Microsoft IQ (Work IQ / Foundry IQ / Web IQ), Microsoft Agent Framework; treat convergence mechanics as directionally confirmed&lt;/li&gt;
&lt;li&gt;Parts 1 and 2 of this series — the classic five-surface model and the four orchestration patterns this article maps forward&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>copilotstudio</category>
      <category>multiagent</category>
      <category>orchestration</category>
    </item>
    <item>
      <title>Multi-Agent Orchestration with Copilot Studio — Part 2: In Practice</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-2-in-practice-33p1</link>
      <guid>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-2-in-practice-33p1</guid>
      <description>&lt;p&gt;Four end-to-end scenarios on different orchestration patterns, a starter MCP server inventory, and the ten anti-patterns that recur in production Copilot Studio deployments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede.&lt;/strong&gt; This is the second of three articles on multi-agent orchestration in Microsoft Copilot Studio. Part 1 settled the architecture: when to split a single agent, what a Copilot Studio agent is composed of, which orchestration patterns exist, and how the Model Context Protocol (MCP) and Agent2Agent (A2A) protocol keep the system composable. Part 2 — In Practice — takes those decisions and works through what they look like in production. Four end-to-end scenarios, each built on a different orchestration pattern, show how the architectural pieces fit together. A starter MCP server inventory makes the platform team’s role explicit. The article closes with ten anti-patterns from real deployments and the corrections that teams have actually applied.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About this series.&lt;/strong&gt; This is Part 2 of three. &lt;strong&gt;Part 1 — Foundations&lt;/strong&gt; establishes the vocabulary, when to split a single agent, the five configuration surfaces, the four orchestration patterns, and how MCP and A2A are configured. &lt;strong&gt;Part 2 — In Practice&lt;/strong&gt; (this article) turns those decisions into four end-to-end scenarios, a starter MCP server inventory, and ten production anti-patterns. Parts 1 and 2 describe the &lt;strong&gt;released, generally available feature set&lt;/strong&gt; — the “classic” Copilot Studio experience, built on &lt;strong&gt;generative orchestration&lt;/strong&gt; , which is GA and fully supported. &lt;strong&gt;Part 3 — The Build 2026 Rebuild&lt;/strong&gt; describes the new four-surface model (Skills, Memory, a new orchestrator); those features are &lt;strong&gt;in public preview and subject to change&lt;/strong&gt; before general availability, so treat Part 3 as forward-looking and re-check status before relying on it.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every scenario uses features documented on Microsoft Learn and either generally available or in public preview as of mid-2026: connected agents, autonomous triggers, agent flows with parallel branches and approval gates, Dataverse as a state store, MCP integration with Streamable transport, and Purview audit logging. Where a capability is in preview (for example, connecting to Microsoft Foundry, Fabric, or Microsoft 365 Agents SDK agents), this article says so. The scenarios pair with named, published case studies — T-Mobile, Nexi Group, Dunaway, Holland America Line, Signetic, Singapore Civil Defense Force, La Trobe University — whose architectural shape matches the patterns described.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Capability status at publication&lt;/strong&gt; Two capabilities directly reinforce these scenarios. &lt;strong&gt;A2A connections are generally available&lt;/strong&gt; , so cross-platform delegation is not a preview dependency. &lt;strong&gt;Computer Use (computer-using agents) is generally available&lt;/strong&gt; — the CUA extension mentioned in Scenario 1 is a shipping capability, with embedding into multi-step workflows in preview. A &lt;strong&gt;redesigned Workflows experience&lt;/strong&gt; (early release) introduces a unified visual canvas with &lt;strong&gt;agent nodes&lt;/strong&gt; that drop existing agents into a flow, plus AI-powered actions for classification and content generation; &lt;strong&gt;asynchronous responses&lt;/strong&gt; &lt;em&gt;(preview)&lt;/em&gt; let agent-flow steps exceed the two-minute limit, which the onboarding scenario benefits from. And &lt;strong&gt;per-agent Microsoft Entra agent identities&lt;/strong&gt; can be auto-created &lt;em&gt;(preview)&lt;/em&gt;, which is the concrete mechanism behind the “Entra Agent ID per agent” recommendation in the anti-patterns section.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why read this&lt;/strong&gt; Read this if Part 1 left you convinced that multi-agent orchestration is the right response to scope drift, and you now need to see four working shapes. The four scenarios — IT incident triage, contract review, field service dispatch, employee onboarding — are not picked for variety; they are picked because they map cleanly onto the four orchestration patterns introduced in Part 1, and because each exposes a different production failure mode that teams are most likely to encounter. Read it if you have ever drawn a multi-agent architecture on a whiteboard, sent it to a senior maker, and watched them rebuild it in a way you did not expect. The MCP inventory section exists to answer the most common follow-up question — “okay, but who owns what?” — with a starting catalog. The anti-patterns section exists to answer the second-most-common follow-up — “what is most likely to bite us first?” — with ten patterns that recur often enough to be predictable.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read Part 1 if you need the vocabulary; read Part 2 if you have the vocabulary and need the working examples. Each scenario is small enough to read in one sitting and concrete enough to reproduce in your own tenant. The point is not that any of these scenarios is the right one for your organization — the point is that the patterns underneath them are.  &lt;/p&gt;




&lt;h2&gt;
  
  
  1. The four scenarios and what they exercise
&lt;/h2&gt;

&lt;p&gt;Four scenarios appear below. They are deliberately ordered by complexity, from the simplest pattern (router-worker) to the most demanding (hierarchical with persistent state). Each builds on the surfaces introduced in Part 1 — instructions, knowledge, tools, topics, triggers — and uses one of the four orchestration patterns.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;What it exercises&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IT incident triage&lt;/td&gt;
&lt;td&gt;Router-worker&lt;/td&gt;
&lt;td&gt;Classification, delegation, structured outputs between agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract review&lt;/td&gt;
&lt;td&gt;Parallel fan-out / fan-in&lt;/td&gt;
&lt;td&gt;Concurrent specialists, scoped knowledge, merged outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field service dispatch&lt;/td&gt;
&lt;td&gt;Router-worker with autonomous trigger&lt;/td&gt;
&lt;td&gt;Event-driven autonomy, bounded decision trees, no user in the loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Employee onboarding&lt;/td&gt;
&lt;td&gt;Hierarchical with persistent state&lt;/td&gt;
&lt;td&gt;Long-running supervision, Dataverse as state store, SLA monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The scenarios are sized to be read end to end. Each one names the agents, provides instructions, walks through the expected runtime behavior, and points to a published case study whose architectural shape matches. The published shape — not the exact numbers — is the part to import.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Scenario one — IT incident triage (router-worker)
&lt;/h2&gt;

&lt;p&gt;The first scenario takes a concrete, widespread problem — tier-one IT service desk volume — and shows how a multi-agent design resolves it using only features available in Copilot Studio today.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;A large share of tier-one service desk tickets are mechanical: password resets, VPN issues, access requests, known application errors. In many IT organizations, this mechanical work accounts for a substantial fraction of the total ticket volume. Each of these tickets, when routed to a human analyst, consumes several minutes — read the ticket, look up the user, open the runbook, apply the fix, update the record.&lt;/p&gt;

&lt;p&gt;The pattern is tedious for analysts and slow for users. It is also unnecessary: the runbooks already exist, the ticketing system already has APIs, and the retrieval work is well inside the capability of current language models.&lt;/p&gt;

&lt;h3&gt;
  
  
  The design
&lt;/h3&gt;

&lt;p&gt;Three agents, with clear responsibilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Triage Orchestrator (user-facing).&lt;/strong&gt; Classifies the incoming ticket into one of a small set of categories, delegates to the appropriate specialist, and returns the response to the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runbook Specialist (connected agent).&lt;/strong&gt; Retrieves the matching runbook from the IT knowledge base (SharePoint) and returns resolution steps or a “not found” result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ticket Writer (connected agent).&lt;/strong&gt; Writes outcomes back to the ticketing system (ServiceNow, via the existing connector). Idempotent — retries do not create duplicates.&lt;/p&gt;

&lt;p&gt;The split is deliberate. The Runbook Specialist is read-only; it never writes. The Ticket Writer writes but does not reason about runbooks. The Orchestrator owns the conversation and the classification but has no direct access to connectors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent configurations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Triage Orchestrator — instructions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are the IT service desk triage agent. When a user
describes a technical problem; your job is to classify it
And route it to the correct specialist.

Classify the request into exactly one of:
  password_reset, vpn, hardware, application, other

Then:
  1. Call RunbookSpecialist with the classification and the
     user's original message.
  2. If RunbookSpecialist returns resolution_steps, present
     the steps to the user in a numbered list and ask if
     they want the ticket closed as resolved.
  3. If the user confirms, call TicketWriter with
     status="resolved" and the applied steps.
  4. If RunbookSpecialist returns no match, call
     TicketWriter with status="routed" and
     assignment_group derived from classification.

Never attempt to resolve a problem yourself.
Never write to the ticketing system directly.
Never mention specialist agents to the user.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Runbook Specialist — instructions:&lt;/strong&gt;&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;look&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;runbooks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;internal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;knowledge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;base&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;resolution&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;steps.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Inputs:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;classification&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;problem_statement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Behavior:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;Search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;knowledge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;scoped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;given&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;classification.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;single&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;best-matching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;runbook.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured):&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="err"&gt;runbook_id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;resolution_steps:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;confidence:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;number&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;create,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;update,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;delete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tickets.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;reason&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;intent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;beyond&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;runbook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;matching.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Knowledge source: a specific SharePoint library, &lt;code&gt;IT Knowledge Base / Runbooks&lt;/code&gt;. Nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ticket Writer — instructions:&lt;/strong&gt;&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;outcomes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ticketing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;system.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Inputs:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;ticket_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(enum:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"resolved"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"routed"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"escalated"&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;applied_steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;optional)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;assignment_group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;optional)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;idempotency_key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Behavior:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;Call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ServiceNow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Incident&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;mapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fields.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;idempotency_key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;deduplicate.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured):&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="err"&gt;ok:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ticket_url:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;reason&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;whether&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;correct.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;retrieve&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;runbooks.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tools: the ServiceNow connector’s &lt;code&gt;Update Incident&lt;/code&gt; action. Nothing else.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestration pattern
&lt;/h3&gt;

&lt;p&gt;Router-worker. The Orchestrator routes; specialists execute. No parallelism, no hierarchy, no callbacks from specialists to the Orchestrator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected runtime behavior
&lt;/h3&gt;

&lt;p&gt;A user writes: “I can’t connect to the VPN from home since this morning.”&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Orchestrator classifies the request as &lt;code&gt;vpn&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It calls the Runbook Specialist with &lt;code&gt;{classification: "vpn", problem_statement: "..."}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Runbook Specialist searches the runbook library, finds a match, returns &lt;code&gt;{runbook_id: "RB-0187", resolution_steps: ["Verify your network...", "Re-register the VPN client...", ...], confidence: 0.91}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Orchestrator presents the steps to the user.&lt;/li&gt;
&lt;li&gt;The user replies that the steps worked.&lt;/li&gt;
&lt;li&gt;The Orchestrator calls the Ticket Writer with &lt;code&gt;status: "resolved"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Ticket Writer updates ServiceNow and returns &lt;code&gt;{ok: true, ticket_url: "..."}&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the Runbook Specialist had returned no match, the Orchestrator would have called the Ticket Writer with &lt;code&gt;status: "routed"&lt;/code&gt; and an assignment group derived from the classification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected outcomes
&lt;/h3&gt;

&lt;p&gt;The scenario mirrors the shape of several published Copilot Studio case studies. T-Mobile equipped customer service representatives with a Power Apps + Copilot Studio agent that provides accurate device information and improves customer experiences. Nexi Group modernized card-service customer support with Copilot Studio, with the explicit outcome of reduced contact-center workload. A1 Inteligência em Viagens used Power Automate and Copilot Studio to boost team efficiency and customer experience.&lt;/p&gt;

&lt;p&gt;The exact numbers depend on ticket mix and runbook quality, but the shape is consistent across published reports: a meaningful share of tier-one volume auto-resolves, a larger share auto-routes with enriched context, and escalation volume drops.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this scenario makes obvious
&lt;/h3&gt;

&lt;p&gt;The value of the split is not the number of agents. It is the clarity of ownership. When the knowledge base team updates a runbook, only the Runbook Specialist is affected. When the ticketing team rotates a credential, only the Ticket Writer is affected. When the user experience changes, only the Orchestrator is affected. Each change is small and independent, which is what allows the overall system to be maintained over time.&lt;/p&gt;

&lt;p&gt;The extensions to consider once the base is working: add an autonomous trigger (a Dataverse row-change event that fires when a new ticket is written to a queue table) so the Orchestrator runs on new tickets, not only when a user chats. Replace the ServiceNow connector with an MCP server to share ticketing tools across multiple agents in your tenant. Add a Computer-Using Agent (CUA) specialist — now generally available in Copilot Studio (May 2026) — for the narrow set of cases where the fix requires clicking through a legacy admin UI without an API.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Scenario two — Contract review pipeline (parallel fan-out)
&lt;/h2&gt;

&lt;p&gt;The second scenario exercises a different orchestration pattern — parallel fan-out — and a different kind of specialist agent. Contract review is a good test because the work splits cleanly across independent review domains, each domain has its own policy library, and the outcome is a merged memo rather than a single-agent response.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;Inbound vendor contracts typically pass through three gates before signature: legal review (indemnity, liability cap, governing law, dispute resolution), finance review (payment terms, auto-renewal clauses, price escalators), and risk review (data processing, subprocessors, breach notification, subcontracting). Each review is conducted by email serially, and the combined cycle frequently spans two weeks for contracts that are not particularly complex.&lt;/p&gt;

&lt;p&gt;The serial nature is the problem. Each reviewer waits for the previous one. Each reviewer reads the full contract, even though their concerns are narrow. The end state — signature — is delayed by the sum of the waits, not the sum of the work.&lt;/p&gt;

&lt;h3&gt;
  
  
  The design
&lt;/h3&gt;

&lt;p&gt;Five agents, one parallel step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intake Orchestrator (user-facing).&lt;/strong&gt; Receives the contract PDF, extracts clauses into a structured clause map, triggers the review fan-out, composes the final memo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clause Extractor (tool, not a separate agent).&lt;/strong&gt; A PDF extraction action backed by an MCP server or Power Automate flow. Returns clauses as a structured list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal Reviewer (connected agent).&lt;/strong&gt; Reviews the clause map against a legal policy library. Returns legal issues with severity and citations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finance Reviewer (connected agent).&lt;/strong&gt; Reviews the clause map against finance policy. Returns finance issues with severity and citations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk Reviewer (connected agent).&lt;/strong&gt; Reviews the clause map against risk and data-protection policy. Returns risk issues with severity and citations.&lt;/p&gt;

&lt;p&gt;The three Reviewers run in parallel. Each has a narrow, owned knowledge source. None of them depends on the others’ output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent configurations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Intake Orchestrator — instructions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You own the contract review process.

When a user uploads a contract:
  1. Call the Clause Extractor to get a structured clause
     map from the document.
  2. In parallel, call LegalReviewer, FinanceReviewer, and
     RiskReviewer with the full clause map.
  3. When all three return, aggregate findings into a single
     review memo organized by severity.
  4. Present the memo to the user with the contract
     reference, the number of issues found, and a link to
     the full findings.

Do not perform legal, financial, or risk analysis yourself.
Do not reformulate reviewer findings; present them verbatim.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Legal Reviewer — instructions:&lt;/strong&gt;&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;contracts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;legal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;risk.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Inputs:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;clause_map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;clauses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;type)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Behavior:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;clause&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;against&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Legal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;library.&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;Flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;issues&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;clause&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;conflicts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;policy&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;missing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;required&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;category.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured):&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="err"&gt;issues:&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="err"&gt;clause_type:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;severity:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"medium"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"low"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;citation:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="err"&gt;suggested_redline:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&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="err"&gt;Knowledge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;source:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SharePoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Legal Policy Library"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;only.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;payment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;terms,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;pricing,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;processing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;those&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;belong&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Finance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Risk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Reviewers.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finance Reviewer and Risk Reviewer follow the same shape, each scoped to its own policy library.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestration pattern
&lt;/h3&gt;

&lt;p&gt;Parallel fan-out / fan-in. The Intake Orchestrator fires three calls at once and joins when all three return. In Copilot Studio, this is typically built as an agent flow with parallel branches — one branch per reviewer — followed by an aggregation step. (In the redesigned Workflows experience now in early release, those reviewer agents can be dropped onto the canvas as agent nodes.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Human-in-the-loop
&lt;/h3&gt;

&lt;p&gt;Copilot Studio agent flows support approval gates. In this design, the memo is delivered to a human reviewer (usually the deal owner or general counsel) who decides what to act on. The system does not automatically redline the contract; it surfaces issues and suggests redlines for human judgment.&lt;/p&gt;

&lt;p&gt;This is the right default for regulated workflows. The published case study from Dunaway — a firm that uses Copilot Studio for city-code research — is explicit that the value of the agent is surfacing accurate information quickly, with the compliance professional retaining decision authority.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected runtime behavior
&lt;/h3&gt;

&lt;p&gt;A user uploads a vendor agreement to the Intake Orchestrator.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Orchestrator calls the Clause Extractor, which returns &lt;code&gt;{clauses: [{type: "indemnity", text: "..."}, {type: "payment_terms", text: "..."}, ...]}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Orchestrator triggers three parallel branches: 

&lt;ul&gt;
&lt;li&gt;Legal Reviewer returns two issues (one high, one medium).&lt;/li&gt;
&lt;li&gt;Finance Reviewer returns one issue (medium: auto-renewal without notification).&lt;/li&gt;
&lt;li&gt;Risk Reviewer returns three issues (one high: subprocessor not listed; two medium).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Orchestrator aggregates the six issues into a memo organized by severity.&lt;/li&gt;
&lt;li&gt;The user receives the memo and decides what to negotiate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The time from upload to memo is effectively the slowest of the three parallel branches plus the extractor and the aggregator — in practice, single-digit minutes, versus single-digit business days in the serial model.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes this work reliably
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Scoped knowledge.&lt;/strong&gt; Each Reviewer’s knowledge source is its own policy library and nothing else. Cross-contamination — a Legal Reviewer surfacing finance concerns — produces noisy memos and erodes trust. The narrower the library, the sharper the output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured outputs.&lt;/strong&gt; Every reviewer returns the same issue shape. The aggregator does not have to parse three different prose styles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citations.&lt;/strong&gt; Every issue includes a citation back to the policy passage that grounds it. Reviewers without citations are not trusted by their human counterparts, and correctly so. (Bear in mind Part 1’s caveat: citations are not always preserved when outputs pass back from a connected agent, so carry the citation explicitly as a field in the structured output rather than relying on the platform to thread it through.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explicit severity.&lt;/strong&gt; Three levels (high, medium, low), defined in each reviewer’s instructions. The aggregator can sort consistently across reviewers.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to watch out for
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Partial failure.&lt;/strong&gt; If the Finance Reviewer times out, what does the memo say? Decide before you build: a “partial review” memo that notes the missing section is more useful than a failed run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy drift.&lt;/strong&gt; The quality of the reviewers depends on the currency of the policy. Assign ownership of each policy library to a named team and review quarterly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope creep.&lt;/strong&gt; It is tempting, once the Legal Reviewer works, to add “intellectual property” and “export control” to its scope. Resist. New domains are new reviewers.&lt;/p&gt;

&lt;p&gt;Two published case studies anchor this shape. Dunaway transformed compliance workflows with a conversational agent that delivers instant, accurate regulatory answers from scoped knowledge — the scoping makes the answers trustworthy. Signetic uses Power Platform and Copilot Studio across healthcare operational workflows, including review-style patterns that merge multiple specialist inputs into operational decisions. Neither describes this pipeline exactly, but the architectural pattern — bounded specialists over scoped knowledge, merged by an orchestrator — is what both rely on.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Scenario three — Field service dispatch (autonomous trigger)
&lt;/h2&gt;

&lt;p&gt;The third scenario exercises an autonomous trigger — the system reacts to an event from the field, not to a user typing into a chat window. This is where Copilot Studio’s March 2025 autonomous-agents GA materially changes what is buildable.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;A field technician arrives at a customer site to service equipment and finds that a required part is missing from the van stock. The resolution today is a phone call. The technician calls dispatch. Dispatch puts the customer call on hold, checks inventory in SAP, calls a nearby warehouse, reschedules the appointment in Dynamics 365 Field Service, calls the customer back, and notifies the technician. The technician waits through all of it — often 30 to 45 minutes of paid idle time, per incident, multiplied by however many incidents happen that day.&lt;/p&gt;

&lt;p&gt;The problem has obvious parts that should be automatic: inventory lookup, rescheduling, and customer notification. None of it is novel; the delay is the cost of humans doing mechanical work.&lt;/p&gt;

&lt;h3&gt;
  
  
  The design
&lt;/h3&gt;

&lt;p&gt;Four agents. Three are called on-demand; one is autonomous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dispatch Orchestrator (autonomous).&lt;/strong&gt; Triggered by an event from the field app — “technician reports missing part.” Drives the resolution. In Copilot Studio, this is implemented as a Dataverse row-change trigger: the field app writes a row to a &lt;code&gt;FieldIncident&lt;/code&gt; table, and the trigger wakes the agent. Where the source system does not write directly to Dataverse, a Power Automate cloud flow subscribes to the source and writes to Dataverse on its behalf.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory Specialist (connected agent).&lt;/strong&gt; Queries SAP for part availability at the current site and at nearby warehouses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduler Specialist (connected agent).&lt;/strong&gt; Proposes and books appointment slots in Dynamics 365 Field Service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notification Specialist (connected agent).&lt;/strong&gt; Sends an SMS and an email to the customer and a Teams message to the technician.&lt;/p&gt;

&lt;p&gt;The Dispatch Orchestrator does almost no reasoning about parts, scheduling, or customer preference. Its job is to call the three specialists in the correct order and handle the cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent configurations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dispatch Orchestrator — instructions (autonomous):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You run automatically when the field app emits a
"missing_part" event (written to the FieldIncident table).

Event payload includes:
  technician_id, customer_site_id, part_number,
  appointment_id, current_time

Behavior:
  1. Call InventorySpecialist with part_number and
     customer_site_id. You get back either:
     - available_locally: true, eta_minutes
     - available_nearby: true, warehouse_id,
       eta_minutes
     - available: false, earliest_date

  2. If available_locally within 30 minutes:
       Call NotificationSpecialist with mode="wait" and
       eta_minutes. Exit.

  3. If available_nearby and eta_minutes &amp;lt;= 120:
       Call NotificationSpecialist with mode="delay".
       Exit.

  4. Otherwise:
       Call SchedulerSpecialist to propose a new
       appointment at or after earliest_date.
       Call NotificationSpecialist with mode="reschedule"
       and the new appointment.
       Exit.

You never book inventory or rearrange stock yourself.
You never modify appointments directly.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Inventory Specialist — instructions:&lt;/strong&gt;&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;inventory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;parts.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Inputs:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;part_number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;site_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Behavior:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;Query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;SAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;connector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;stock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;given&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;site&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;warehouses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;within&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;configured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;proximity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;radius.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured):&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="err"&gt;available_locally:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;eta_minutes:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;number?&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;available_nearby:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;warehouse_id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string?&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;available:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;earliest_date:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;date?&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;reserve&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;parts.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;reschedule.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scheduler Specialist and Notification Specialist follow the same shape, each with its own scoped tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestration pattern
&lt;/h3&gt;

&lt;p&gt;Router-worker with an autonomous trigger. The Orchestrator is event-driven, not user-driven. The specialists are standard connected agents. Microsoft Learn’s &lt;em&gt;Event trigger overview&lt;/em&gt; documents Dataverse row-change, SharePoint, OneDrive, Planner, and Recurrence triggers — exactly the surfaces an event-driven agent runs on (an HTTP request trigger and Power Automate flows extend the catalog where a native trigger does not exist).&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected runtime behavior
&lt;/h3&gt;

&lt;p&gt;The field app emits a &lt;code&gt;missing_part&lt;/code&gt; event at 10:15 AM, written as a row to the &lt;code&gt;FieldIncident&lt;/code&gt; table.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The row-change trigger wakes the Orchestrator. It calls the Inventory Specialist.&lt;/li&gt;
&lt;li&gt;Inventory returns &lt;code&gt;{available_locally: false, available_nearby: true, warehouse_id: "WH-17", eta_minutes: 75}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The Orchestrator calls the Notification Specialist with &lt;code&gt;mode: "delay", eta_minutes: 75&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The technician receives a Teams message; the customer receives an SMS and an email: “Your technician has been delayed 75 minutes to retrieve a part. New estimated arrival: 11:30 AM.”&lt;/li&gt;
&lt;li&gt;Everything above happens in under a minute.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If inventory had been unavailable for two days, step three would have called the Scheduler Specialist instead, who would have proposed a slot and booked it in Dynamics 365 Field Service, followed by the notifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes the autonomous trigger the right shape
&lt;/h3&gt;

&lt;p&gt;Three properties justify autonomy here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The signal is clean.&lt;/strong&gt; The field app writes a well-defined row with a known schema. There is no ambiguity to clarify with a human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The reasoning is bounded.&lt;/strong&gt; The decision tree is small. Nothing about the workflow requires open-ended judgment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The latency matters.&lt;/strong&gt; A human-in-the-loop step would defeat the point. The whole value is in removing the 30-minute phone call.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Where any of those is not true, a conversational trigger with a human in the loop is in a better shape.&lt;/p&gt;

&lt;h3&gt;
  
  
  A trigger-security note
&lt;/h3&gt;

&lt;p&gt;Autonomous triggers run with the agent maker’s credentials, and the payload that wakes the agent is untrusted input that is then added to the agent’s context. This is precisely the surface that CVE-2026-21520 exploited: an indirect prompt injection inserted into a SharePoint form field was concatenated into a Copilot Studio agent’s instructions, which then exfiltrated data via a legitimate Outlook action (Microsoft patched it in January 2026; it was publicly disclosed in April 2026). For a &lt;code&gt;FieldIncident&lt;/code&gt; row, the practical lessons are the same as Microsoft’s autonomous-agent guidance: validate required fields before acting, narrow the conditions that trigger the action, and never let free-text payload fields override the agent’s instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real anchor points
&lt;/h3&gt;

&lt;p&gt;Several published Copilot Studio case studies touch adjacent patterns. The Holland America Line virtual concierge uses Copilot Studio to resolve customer requests with backend integrations without requiring a human operator for standard cases. Signetic uses Power Platform and Copilot Studio to automate healthcare operational workflows that would otherwise require coordination calls between departments. Singapore Civil Defence Force reports automating manual processes that previously required significant staff time, with savings described as multi-million-dollar in the published case study. Field service dispatch fits the same mold: a bounded workflow with clear inputs and a clear success state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safeguards for autonomous agents
&lt;/h3&gt;

&lt;p&gt;Microsoft’s guidance on autonomous agents is explicit about the safeguards that matter, and they apply directly here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Least-privileged access.&lt;/strong&gt; The Inventory Specialist should have read-only access to SAP. The Scheduler Specialist should have write access only to the specific entities it books. Neither has broader scope. Per-agent Entra agent identities — now auto-creatable in Copilot Studio &lt;em&gt;(preview)&lt;/em&gt; — make this scoping concrete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input validation.&lt;/strong&gt; The field app’s row write is authenticated; the Orchestrator validates required fields before acting, and treats free-text fields as data, not instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logging.&lt;/strong&gt; Every decision and every action is logged to Purview. Field Service dispatch is a regulated area in some industries (medical device servicing, for example), and auditable logs are non-negotiable there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human escalation path.&lt;/strong&gt; If the Orchestrator cannot resolve the event — for example, the customer has no contact method on file — it escalates to a human dispatcher rather than failing silently.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Scenario four — Employee onboarding (hierarchical with persistent state)
&lt;/h2&gt;

&lt;p&gt;The fourth and final scenario exercises the hierarchical pattern: a long-running process that spans departments, persists state over days, and requires coordination across multiple specialist agents. Employee onboarding is a good example because the work is well-defined, the owners are clear, and the measurable outcome — day-one readiness — is something every HR organization already tracks.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;Between a candidate accepting an offer and their first day, a long list of things must happen: HR creates the employment record, legal sends contracts for signature, IT provisions the Entra account and assigns licenses, procurement orders hardware, facilities allocates a desk and issues a badge request, the hiring manager drafts a 30-day plan and sets up 1:1s, the new hire is added to Teams channels and mailing lists.&lt;/p&gt;

&lt;p&gt;None of this is intellectually hard. It is coordination work across four or five systems and three or four departments, and it often fails. In many organizations, a meaningful share of new hires arrive on day one with at least one blocker — a missing laptop, no email account, no desk assignment. Each blocker creates friction that is remembered long after it is resolved.&lt;/p&gt;

&lt;h3&gt;
  
  
  The design
&lt;/h3&gt;

&lt;p&gt;One supervisor agent, four specialists, and one shared state store. All live in Copilot Studio, using connected agents and autonomous triggers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding Supervisor (autonomous).&lt;/strong&gt; Owns the case from offer acceptance to day 30. Orchestrates the specialists. Escalates when any step is overdue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HR Specialist (connected agent).&lt;/strong&gt; Creates the Workday record and sends the contract through DocuSign.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT Specialist (connected agent).&lt;/strong&gt; Provisions the Entra ID account, assigns licenses, orders hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facilities Specialist (connected agent).&lt;/strong&gt; Allocates a desk and issues a badge request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manager Specialist (connected agent).&lt;/strong&gt; Drafts the 30-day plan from a template, schedules 1:1s, and adds the new hire to Teams channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared state.&lt;/strong&gt; A Dataverse table, &lt;code&gt;OnboardingCase&lt;/code&gt;, with one row per new hire and columns for each step’s status, timestamps, and artifact links.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Dataverse and not conversation history
&lt;/h3&gt;

&lt;p&gt;The process spans days or weeks. Conversation history in Copilot Studio is not the right place for state that must outlive a session. The durable design principle is the same: persistent state for a long-running process belongs in Dataverse, not in conversation history, which truncates.&lt;/p&gt;

&lt;p&gt;Every specialist updates its own step’s status in the &lt;code&gt;OnboardingCase&lt;/code&gt; row when it completes. The Supervisor reads the row periodically (or reacts to Dataverse row-change events) to decide what to do next. Where a specialist step legitimately runs long, asynchronous responses for agent flows &lt;em&gt;(preview)&lt;/em&gt; let it exceed the two-minute limit and return its result when it finishes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent configurations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Onboarding Supervisor — instructions (autonomous):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You run when a new row is created in the OnboardingCase
table (status = "offer_accepted") or when a row is updated
(status changes).

For each case:
  1. If no HR step has started, call HRSpecialist.
  2. When HR step completes, call IT and Facilities in
     parallel.
  3. When IT step completes, call ManagerSpecialist to
     draft the 30-day plan and schedule 1:1s.
  4. If any step exceeds its SLA (HR: 1 business day, IT:
     3 business days, Facilities: 2 business days,
     Manager: 5 business days), post a Teams message to
     the HR coordinator channel with the overdue step
     and the case ID.

Update OnboardingCase.overall_status after every change.

Never perform steps yourself. Always delegate.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;IT Specialist — instructions:&lt;/strong&gt;&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;provisioning&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hire.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Inputs:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;case_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(string)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;first_name,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;last_name,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;start_date,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;job_title,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;cost_center&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Behavior:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Entra&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Microsoft&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Graph&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;connector.&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;licenses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;job_title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;configured&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;license-mapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;table.&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;standard&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hardware&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;procurement&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;connector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;specific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;determined&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;job_title).&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OnboardingCase.it_status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"complete"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;when&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;three&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;succeed.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(structured):&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="err"&gt;ok:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;entra_user_id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;hardware_order_id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;string&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="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;HR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;records.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;draft&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="err"&gt;-day&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;plan.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other specialists follow the same shape — each scoped to its own domain, each writing only to its own columns in &lt;code&gt;OnboardingCase&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestration pattern
&lt;/h3&gt;

&lt;p&gt;Hierarchical. The Supervisor runs autonomously, triggered by changes to Dataverse rows. It invokes specialists in a documented order with some parallelism (IT and Facilities can happen concurrently). Each specialist’s work is bounded, owned, and auditable. Agent flows provide the mechanism for the Supervisor. Triggers on Dataverse table changes are a first-class feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected runtime behavior
&lt;/h3&gt;

&lt;p&gt;Day 0: HR enters a new row in &lt;code&gt;OnboardingCase&lt;/code&gt; with &lt;code&gt;status = "offer_accepted"&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Supervisor wakes and calls the HR Specialist. HR Specialist creates the Workday record and initiates the DocuSign flow. &lt;code&gt;hr_status&lt;/code&gt; moves to &lt;code&gt;in_progress&lt;/code&gt;, then to &lt;code&gt;complete&lt;/code&gt; when the contract is signed.&lt;/li&gt;
&lt;li&gt;On HR completion, the Supervisor calls IT and Facilities in parallel. IT provisions Entra, licenses, and hardware. Facilities allocates a desk and issues a badge request.&lt;/li&gt;
&lt;li&gt;On IT completion, the Supervisor calls the Manager Specialist, who schedules 1:1s in the hiring manager’s calendar, generates a 30-day plan draft in Word, saves it to the manager’s OneDrive, and adds the new hire to the appropriate Teams channels.&lt;/li&gt;
&lt;li&gt;On day 1, the &lt;code&gt;overall_status&lt;/code&gt; column reflects the readiness of the new hire. If any step is overdue, the HR coordinator’s Teams channel has been notified.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Expected outcomes
&lt;/h3&gt;

&lt;p&gt;Publicly available data on Copilot Studio onboarding use cases points in a consistent direction. Pragmatiq’s published use-case list identifies “Guiding employee onboarding” as one of the top Copilot Studio patterns: “HR teams use Copilot Studio to guide new hires through IT setup, policies, and training materials, helping them get up to speed faster.” La Trobe University’s published case study describes academic onboarding and student-facing processes handled with Copilot Studio; the pattern generalizes to employee onboarding in its coordination shape.&lt;/p&gt;

&lt;p&gt;Organizations measuring before-and-after on this pattern commonly report day-one readiness improving substantially, with the remaining gap being cases with unusual requirements that still need human routing. The gains come from the coordination being mechanical, not from any single step being faster. (Treat any specific percentage as illustrative unless your own baseline supports it — the published case studies describe the shape of the improvement, not a universal number.)&lt;/p&gt;

&lt;h3&gt;
  
  
  What this scenario makes obvious
&lt;/h3&gt;

&lt;p&gt;Three things stand out in the hierarchical pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State is the architecture.&lt;/strong&gt; The &lt;code&gt;OnboardingCase&lt;/code&gt; Dataverse table is not an implementation detail; it is the source of truth. Every decision the Supervisor makes depends on the state it reads. Every specialist writes back to it. If that table is modeled carelessly, the whole system is fragile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specialists are boring.&lt;/strong&gt; None of the specialists does anything clever. They do one thing each, reliably. That is the point. Cleverness in the wrong place is a reliability problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Supervisor is small.&lt;/strong&gt; The instruction block is short. The logic is explicit. There is no “decide the best onboarding strategy” reasoning — there is a process, and the Supervisor executes it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the pattern commonly goes wrong
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Treating the Supervisor as a chatbot.&lt;/strong&gt; Someone wants to “ask the onboarding agent how things are going.” Don’t. Build a report on top of the Dataverse table instead. The Supervisor’s job is execution, not Q&amp;amp;A.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overloading &lt;code&gt;OnboardingCase&lt;/code&gt;.&lt;/strong&gt; Adding every possible detail to the row makes it slower and harder to change. Keep it to status, timestamps, and references; put the details in the relevant specialist’s own storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing the SLA side of the Supervisor.&lt;/strong&gt; Without the overdue logic, the system looks like it is working until someone realizes a specific step has been stuck for a week. The SLA rule is not optional.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. A practical MCP inventory for enterprise Copilot Studio deployments
&lt;/h2&gt;

&lt;p&gt;The four scenarios above all assume the existence of well-described tools. In Part 1, MCP was introduced as the standard that lets those tools be defined once and consumed by many agents. This section proposes a starter catalog of MCP servers and tools that most enterprises need. Everything listed here is either a real, shipping MCP server from Microsoft or a major vendor, or a thin wrapper around an existing, documented enterprise API that any team can build using the official MCP SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why start from an inventory
&lt;/h3&gt;

&lt;p&gt;Makers tend to build MCP servers reactively — one per immediate need — and end up with an ecosystem that overlaps, duplicates, and ages unevenly. An inventory, maintained by the platform team, makes the design choices explicit: what domains exist, who owns each, and where a new capability should go.&lt;/p&gt;

&lt;p&gt;A practical inventory answers three questions for every proposed tool:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which domain does it belong to? (Only one.)&lt;/li&gt;
&lt;li&gt;Who owns the server that hosts it?&lt;/li&gt;
&lt;li&gt;Is it read-only or does it write, and if it writes, is it idempotent?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Microsoft-published MCP servers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Learn MCP server.&lt;/strong&gt; Exposes Microsoft documentation as searchable tools. Useful for internal developer agents and customer support agents who need up-to-date Microsoft product guidance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Dataverse MCP&lt;/strong&gt; — platform-level surfaces that expose Dataverse queries to agents, documented in the Microsoft Copilot Studio sample repositories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure MCP servers&lt;/strong&gt; from the Microsoft Azure organization on GitHub, exposing administrative surfaces for Azure resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Microsoft Copilot Acceleration Team publishes working samples in the CopilotStudioSamples repository on GitHub, including the dynamic MCP routing sample referenced in Part 1. Remember that Copilot Studio also supports registering an existing MCP server as a bring-your-own asset through Agents 365, for organizations that want central governance of servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Third-party MCP servers with public presence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub MCP server&lt;/strong&gt; — official server from GitHub for repository, issue, and pull-request operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlassian MCP servers&lt;/strong&gt; — for Jira and Confluence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion, Linear, Asana&lt;/strong&gt; — community- and vendor-provided servers for common SaaS work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many enterprises, these third-party servers are the starting point because the backend APIs are stable and the servers are maintained by the vendors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enterprise-internal domains that typically need an MCP server
&lt;/h3&gt;

&lt;p&gt;The categories below are ones most enterprises either build themselves or expect to. Each can be implemented as a thin MCP wrapper over the existing backend’s REST API using the official MCP SDKs (available in TypeScript, Python, C#, and others).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;th&gt;Typical tools exposed&lt;/th&gt;
&lt;th&gt;Owner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IT service management&lt;/td&gt;
&lt;td&gt;search_incidents, get_incident, create_incident, update_incident, search_knowledge&lt;/td&gt;
&lt;td&gt;IT Operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inventory / ERP&lt;/td&gt;
&lt;td&gt;check_stock, list_warehouses, get_material&lt;/td&gt;
&lt;td&gt;Supply Chain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HR / workforce&lt;/td&gt;
&lt;td&gt;get_employee, list_open_requisitions, create_hire_record&lt;/td&gt;
&lt;td&gt;HR Tech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field service&lt;/td&gt;
&lt;td&gt;list_slots, book_appointment, cancel_appointment&lt;/td&gt;
&lt;td&gt;Field Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Policy / knowledge&lt;/td&gt;
&lt;td&gt;search_policy, get_policy, list_policy_versions&lt;/td&gt;
&lt;td&gt;Legal / Compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;create_user, assign_license, add_to_group&lt;/td&gt;
&lt;td&gt;IT Security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Procurement&lt;/td&gt;
&lt;td&gt;order_hardware, get_order_status, list_catalog&lt;/td&gt;
&lt;td&gt;IT Procurement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Digital signature&lt;/td&gt;
&lt;td&gt;send_envelope, get_envelope_status&lt;/td&gt;
&lt;td&gt;Legal Operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document operations&lt;/td&gt;
&lt;td&gt;extract_text, extract_tables, split, merge&lt;/td&gt;
&lt;td&gt;Shared Services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collaboration&lt;/td&gt;
&lt;td&gt;create_channel, add_member, post_message&lt;/td&gt;
&lt;td&gt;Collaboration / M365&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each row is a server, not a tool. The reason is ownership: when the ServiceNow team rotates credentials, they do it once in the ITSM server, and every agent continues to work.&lt;/p&gt;

&lt;p&gt;For domains that already have excellent Power Platform connectors (many of these do — ServiceNow, SAP, Workday, Dynamics 365 Field Service, DocuSign, Microsoft Graph), the decision between “use the connector directly” and “wrap it in an MCP server” comes down to reuse. If only one agent needs these tools, the connector is simpler. If three or more agents need them, an MCP server is usually the right investment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-cutting concerns
&lt;/h3&gt;

&lt;p&gt;A few principles apply to every server in the inventory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read-only versus write separation.&lt;/strong&gt; When a single server mixes read and write tools, a broader scope of credentials is required to use it. A cleaner pattern is to split — &lt;code&gt;itsm-read&lt;/code&gt; and &lt;code&gt;itsm-write&lt;/code&gt; — and to grant the write server’s credentials only to agents that actually need them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idempotency on every write.&lt;/strong&gt; Retries happen. Every write tool should accept an idempotency key and use it on the backend to deduplicate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured outputs.&lt;/strong&gt; Tools should return structured data with explicit schemas. The MCP protocol supports this natively; use it. An agent parsing prose is a fragile agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool descriptions as products.&lt;/strong&gt; The description is what the orchestrator reads to decide whether to call a tool. Treat tool descriptions like API documentation — specific, accurate, and up to date. Include: what the tool does, when to use it, what it returns, and any side effects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication.&lt;/strong&gt; OAuth 2.0 with Entra ID is the default for enterprise tenants. API keys are acceptable for internal network-scoped servers; the connection manager in Copilot Studio encrypts them at rest. Unauthenticated MCP endpoints should not exist in a business tenant. (Because MCP connectivity rides on Power Platform connectors, connector-level data policies also govern MCP access.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit and observability.&lt;/strong&gt; Every MCP server should log every call with the calling agent identity, the tool name, the inputs, the outputs, and the latency. Emit these logs to Sentinel or your SIEM of choice. Purview already captures the agent-side record.&lt;/p&gt;

&lt;h3&gt;
  
  
  Governance at the tenant level
&lt;/h3&gt;

&lt;p&gt;The Power Platform Admin Center’s &lt;strong&gt;Copilot Hub&lt;/strong&gt; and the &lt;strong&gt;agent inventory&lt;/strong&gt; (now queryable as a schema from the admin center, API, or Azure Resource Graph &lt;em&gt;(preview)&lt;/em&gt;) provide the tenant-level surface for seeing which agents use which MCP servers; &lt;strong&gt;Microsoft Agent 365&lt;/strong&gt; with the &lt;strong&gt;Entra agent registry&lt;/strong&gt; (Ignite 2025) extends that view across platforms. Combine that with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment strategy.&lt;/strong&gt; Development, test, and production environments for MCP servers and their consuming agents. Pipelines promote both together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DLP policies.&lt;/strong&gt; Apply Data Loss Prevention policies to the connectors backing MCP servers. A write-capable MCP server is business data; treat it that way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entra Agent ID.&lt;/strong&gt; Each agent gets a first-class identity, and permissions are scoped per identity (auto-creatable per agent in Copilot Studio &lt;em&gt;(preview)&lt;/em&gt;). An IT triage agent does not need credentials to create employment records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Secure Access for agent traffic.&lt;/strong&gt; Where available, routing agent outbound calls through Microsoft’s network security enforcement layer is worth considering for regulated tenants.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A starter prioritization
&lt;/h3&gt;

&lt;p&gt;If an organization is beginning from zero, the order that tends to work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stand up one read-only domain MCP server first — usually policy or knowledge. Let agents consume it. Prove the integration pattern works.&lt;/li&gt;
&lt;li&gt;Add one write-capable server (ITSM or HR). Impose idempotency and audit discipline from day one.&lt;/li&gt;
&lt;li&gt;Adopt the vendor-provided servers (GitHub, Atlassian, etc.) for domains you already use.&lt;/li&gt;
&lt;li&gt;Expand to the rest of the inventory as agent demand justifies.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trying to build all 10 servers at once results in an inventory with no consumers. Each server should exist because a specific agent needs it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to resist
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mega-servers that expose everything.&lt;/strong&gt; A single MCP server with 200 tools recreates the god-agent problem at the tool layer. Split by domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Servers that replicate connector logic that already exists.&lt;/strong&gt; If the Power Platform connector is already good and only one agent needs it, skip the MCP wrapper. MCP is a sharing mechanism; sharing is only worth it when there is something to share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom protocols on top of MCP.&lt;/strong&gt; If a team is tempted to add their own message shapes or non-standard tool conventions, they have probably drifted from the standard. MCP-compliant clients will not understand them, and the portability value is lost.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Ten anti-patterns that recur in production
&lt;/h2&gt;

&lt;p&gt;The previous sections have covered the architecture, the scenarios, and the inventory. This last section collects what does not fit neatly into any of those categories: the patterns that look reasonable on paper and fail in production, and the corresponding lessons that stick. Each anti-pattern reflects a failure mode teams report in real Copilot Studio deployments, and the corrections are the ones teams have actually applied.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 1 — The god agent
&lt;/h3&gt;

&lt;p&gt;A single agent acquires, over months, fifty tools, nine knowledge sources, and an instruction block that bumps up against the 8,000-character limit and that nobody can fully read in one sitting. Orchestration quality degrades: the agent selects the wrong tools, cites the wrong documents, and occasionally rejects valid requests. The team adds more rules to the instructions to patch the symptoms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it happens.&lt;/strong&gt; Each addition seemed small at the time. Ownership was never explicit. Nobody had the authority to say no.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Split by domain into specialists. Apply the criteria in Part 1: tool count approaching 30-40, instruction length relative to the 8,000-character ceiling, number of owners, and SLA variance. The first split is the hardest; subsequent ones are routine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; One agent, one domain, one owner. Enforce it at design review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 2 — Prose contracts between agents
&lt;/h3&gt;

&lt;p&gt;The Orchestrator calls the Ticket Writer, which returns “I created ticket INC-12345 for you.” The Orchestrator then tries to extract the ticket ID with string matching. For six months, it works. Then someone rewrites the Ticket Writer’s output to be more conversational, and every downstream integration breaks quietly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Every called agent returns structured data. Copilot Studio supports this natively; both connected and A2A agents allow structured outputs. Make this mandatory at the design-review stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Structured in, structured out. Prose is for users, not for agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 3 — Silent retries
&lt;/h3&gt;

&lt;p&gt;The calling agent retries a failed call after a timeout. The called agent had actually succeeded; the failure was a network blip. The result: two tickets, two emails, two meeting invitations. Over a quarter, thousands of duplicate issues accumulate, and nobody notices until the project management tool begins to degrade under the volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Every write-capable tool accepts an idempotency key, and the backend uses it to deduplicate. The calling agent generates a stable key per logical operation (typically based on the conversation ID and the step name) and passes it on retries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Retries are a first-class design concern. Idempotency is not optional for writes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 4 — Unscoped credentials
&lt;/h3&gt;

&lt;p&gt;Every MCP server, every connector, and every agent uses the same service principal. First breach compromises everything. Rotation is impossible without downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Entra Agent ID (introduced May 2025; expanded to public preview at Ignite 2025) gives each agent a first-class identity, and Copilot Studio can now auto-create one per agent &lt;em&gt;(preview)&lt;/em&gt;. Grant permissions per agent, scoped to exactly what that agent needs. Use managed identities where supported. Rotate credentials per connection, not per tenant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Least privilege is a design input, not a post-deployment cleanup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 5 — No state store
&lt;/h3&gt;

&lt;p&gt;A multi-step orchestration relies on conversation history to remember where it is. Conversation history truncates. The orchestration loses its place, and the Orchestrator either restarts the process (producing duplicates) or abandons it (producing incomplete work).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Persist state in Dataverse. The &lt;code&gt;OnboardingCase&lt;/code&gt; pattern from scenario four is the generalization: one row per case, columns for each step’s status, with row-change events driving the Supervisor. Every specialist writes in their own columns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; If the process outlives the conversation, so should the state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 6 — Knowledge source overload
&lt;/h3&gt;

&lt;p&gt;An agent is attached to 12 SharePoint sites, 6 uploaded files, 2 website URLs, and a Graph connector. Retrieval produces irrelevant passages. Cited answers are confidently wrong. Adding more sources makes it worse, not better. (Generative orchestration also caps SharePoint knowledge at 25 site URLs per agent, which is a hard reminder that more is not better.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Scope knowledge tightly. One domain, one library. The case studies that cite retrieval quality as the winning factor — Dunaway, ABN AMRO, La Trobe University — all scoped narrowly. Where a second domain matters, that is usually a second specialist with their own knowledge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Retrieval quality is a function of signal-to-noise, not of source count.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 7 — Circular delegation
&lt;/h3&gt;

&lt;p&gt;Agent A calls Agent B, who calls Agent A, who calls Agent B. The orchestrator executes until a timeout or token exhaustion. The bill arrives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Specialists never call their parents back. If a specialist appears to need something the parent has, the parent should pass it down as an input. (Copilot Studio’s one-level nesting rule — an agent with connected agents can’t itself be a connected agent — limits but does not eliminate the risk.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Delegation is a tree, not a graph. Trees have no cycles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 8 — Conversational autonomy
&lt;/h3&gt;

&lt;p&gt;An autonomous agent is built as a chatbot that also runs on a schedule. The chatbot surface and the autonomous surface have different failure modes, and the team maintains both. When a user interrupts the autonomous run through chat, the state becomes inconsistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Autonomous agents have no chat surface. If users want visibility, build a report on top of the state store. Chat is a separate agent if it is needed at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Autonomy is a different product shape from conversation. Do not combine them in one agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 9 — Ignoring the security posture of inputs and called agents
&lt;/h3&gt;

&lt;p&gt;Two failure modes share one root cause: trusting content the agent did not author. In the first, an A2A agent from a partner is added to the tool list; six months later, a vulnerability in the partner’s agent lets its conversation context leak through its outputs. In the second — the one Microsoft assigned a CVE to — an attacker placed instructions in a SharePoint form field that an autonomous agent ingested as authoritative context. Microsoft assigned &lt;strong&gt;CVE-2026-21520&lt;/strong&gt; (CVSS 7.5) to that indirect prompt-injection issue, patched it in January 2026, and publicly disclosed it in April 2026. Notably, the injected instruction exfiltrated data through a &lt;em&gt;legitimate&lt;/em&gt; Outlook action, so DLP never fired. Both cases prove the same point: every input an agent trusts — a partner agent’s output, a form field, a retrieved document — expands the attack surface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Treat external agents as supply chain dependencies: review their security posture, scope their access narrowly, log their calls, and rotate credentials. Treat trigger and retrieval inputs as untrusted: validate payloads, and never let free-text content override the agent’s instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Defense-in-depth is necessary; agent composition is not safe by default. The LLM cannot reliably tell trusted instructions from untrusted data — so the boundary has to be enforced around it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-pattern 10 — Measuring the wrong thing
&lt;/h3&gt;

&lt;p&gt;A team reports “the agent answered 10,000 questions this month.” That is a count, not an outcome. The team does not know how many answers were correct, how many resolved the user’s underlying need, or how many caused follow-up work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correction.&lt;/strong&gt; Measure outcomes: auto-resolution rate, user confirmation of correctness, downstream ticket creation, time-to-resolution. Copilot Studio’s analytics surface, combined with data in the relevant business systems, supports these measurements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson.&lt;/strong&gt; Volume is not value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommendations that follow
&lt;/h3&gt;

&lt;p&gt;Pulling the corrections together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architecture.&lt;/strong&gt; One agent per domain. Separate read from write. Tree, not graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contracts.&lt;/strong&gt; Structured inputs and outputs. Explicit error contracts. Idempotency keys on writes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security.&lt;/strong&gt; Scoped credentials. Entra Agent ID per agent. Validate untrusted inputs. Audit everything. Review external agents like you review external vendors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operations.&lt;/strong&gt; State in Dataverse. Outcome metrics, not volume metrics. Ownership per agent, reviewed quarterly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standards.&lt;/strong&gt; MCP for tools. A2A for agents across platforms (GA since April 2026). Connected agents for Copilot Studio–native specialists. Child agents for subroutines inside a parent.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. What Copilot Studio gives you today, one more time
&lt;/h2&gt;

&lt;p&gt;Every capability used across Parts 1 and 2 of this series is available now, with preview status noted where it applies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generative orchestration with tool selection.&lt;/li&gt;
&lt;li&gt;Child, connected, and A2A agents (A2A generally available since April 2026; connections to Microsoft Foundry, Fabric, and M365 Agents SDK agents in public preview).&lt;/li&gt;
&lt;li&gt;MCP server integration with Streamable transport (SSE no longer supported after August 2025).&lt;/li&gt;
&lt;li&gt;Autonomous agents with documented Dataverse, SharePoint, OneDrive, Planner, and Recurrence triggers; an HTTP request trigger and cloud flows extend the catalog where a native trigger does not yet exist.&lt;/li&gt;
&lt;li&gt;Agent flows with parallel branches and approval gates — and a redesigned Workflows experience in early release, with agent nodes and asynchronous responses &lt;em&gt;(preview)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Computer Use (computer-using agents), generally available since May 2026.&lt;/li&gt;
&lt;li&gt;Dataverse as a governed state store.&lt;/li&gt;
&lt;li&gt;Entra Agent ID (per-agent auto-creation in preview), Copilot Hub, the agent inventory schema &lt;em&gt;(preview)&lt;/em&gt;, Microsoft Agent 365, and the Copilot Control System for governance.&lt;/li&gt;
&lt;li&gt;Purview audit across agent activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing in this series required features that do not exist. The gap between “possible today” and “in production somewhere” is smaller than the marketing noise suggests. The gap between “possible” and “in production well” is larger — and the anti-patterns above are the ones that close it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;If you take five things away from this article, they are these.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;the four patterns are not abstractions; they have concrete shapes you can copy&lt;/strong&gt;. Router-worker is the IT triage scenario: classification, delegation, structured returns. Parallel fan-out is the contract review scenario: independent specialists with scoped knowledge, merged outputs. Router-worker with an autonomous trigger is the field service scenario: a clean event, a bounded decision tree, no human in the loop. Hierarchical with persistent state is the employee onboarding scenario: a supervisor that reads from a Dataverse table, specialists that update their own columns, and SLA monitoring that escalates when work is stuck.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;state is the architecture for anything long-running&lt;/strong&gt;. Dataverse is the right place for it. Conversation history is not. Every hierarchical and event-driven design in this article depends on a state table whose columns are the contract between the agents. Model it carelessly, and the whole system is fragile; model it well, and the supervisor becomes trivial.&lt;/p&gt;

&lt;p&gt;Third, &lt;strong&gt;MCP is a platform decision, not an agent decision&lt;/strong&gt;. The inventory in section 6 is a starting point because the question of which server owns which domain must be answered once by the platform team, with the consuming agents in mind. Mega-servers and one-off wrappers both recreate the problems MCP exists to solve. Domain ownership and read/write separation are the load-bearing rules.&lt;/p&gt;

&lt;p&gt;Fourth, &lt;strong&gt;the ten anti-patterns are observations, not predictions&lt;/strong&gt;. Each reflects a failure mode teams hit in shipping deployments. The god agent, prose contracts, silent retries, unscoped credentials, no state store, knowledge overload, circular delegation, conversational autonomy, ignored security posture, and measuring volume instead of outcomes — these are the failure modes a design review should explicitly check for.&lt;/p&gt;

&lt;p&gt;Fifth, &lt;strong&gt;the measure of a multi-agent system is not how clever any single agent is — it is how boring each agent can become&lt;/strong&gt;. Boring agents — narrow, owned, tested, well-described — compose into systems that deliver outcomes reliably. The four scenarios above each succeed because their specialists do one thing, do it well, and stop. The inventory and the anti-patterns exist to keep them that way.&lt;/p&gt;

&lt;p&gt;Multi-agent orchestration is not a novelty. It is the shape enterprise AI takes when it grows beyond a single use case. Copilot Studio is one of the platforms where that shape is now routine to build, with two open standards (MCP and A2A) that keep it composable and a governance surface that keeps it safe to operate. Part 1 settled the architectural decisions; Part 2 worked through what they look like when executed. The rest is the discipline of doing it well — and that, as it turns out, is the part that takes practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/multi-agent-patterns" rel="noopener noreferrer"&gt;Explore multi-agent orchestration patterns&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-add-other-agents" rel="noopener noreferrer"&gt;Add other agents (overview)&lt;/a&gt; — child vs connected agents; preview status of Foundry/Fabric/M365 Agents SDK connections&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/requirements-quotas" rel="noopener noreferrer"&gt;Quotas and limits&lt;/a&gt; — 8,000-character instruction limit; 25 SharePoint sites under generative orchestration&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/autonomous-agents" rel="noopener noreferrer"&gt;Design autonomous agent capabilities&lt;/a&gt; — autonomous agents GA, March 2025&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-triggers-about" rel="noopener noreferrer"&gt;Event trigger overview&lt;/a&gt; — documented event triggers (SharePoint, OneDrive, Planner, Recurrence, Dataverse row-change)&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/whats-new" rel="noopener noreferrer"&gt;What’s new in Copilot Studio&lt;/a&gt; — A2A GA (April 2026), Computer Use GA (May 2026), new Workflows experience, async agent-flow responses (preview), per-agent Entra identities (preview), agent inventory schema (preview)&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-add-existing-server-to-agent" rel="noopener noreferrer"&gt;Connect your agent to an existing Model Context Protocol (MCP) server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent" rel="noopener noreferrer"&gt;Connect an agent available over the Agent2Agent (A2A) protocol&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/adoption-case-studies" rel="noopener noreferrer"&gt;Copilot Studio real-world transformation stories&lt;/a&gt; — T-Mobile, Nexi Group, A1 Inteligência em Viagens, Dunaway, Signetic, Holland America Line, Singapore Civil Defence Force, La Trobe University, ABN AMRO, Rabobank&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/connectors/service-now/" rel="noopener noreferrer"&gt;ServiceNow connector reference&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/connectors/connector-reference/" rel="noopener noreferrer"&gt;Power Platform connectors reference&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/power-platform/admin/copilot/copilot-hub" rel="noopener noreferrer"&gt;Copilot Hub in the Power Platform Admin Center&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-365/copilot/copilot-control-system/overview" rel="noopener noreferrer"&gt;Copilot Control System overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft CopilotStudioSamples — &lt;a href="https://microsoft.github.io/mcscatblog/posts/dynamic-mcp-routing-copilot-studio/" rel="noopener noreferrer"&gt;Dynamic MCP Routing in Copilot Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model Context Protocol — &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Official specification and SDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Agent2Agent protocol — &lt;a href="https://a2aproject.github.io/A2A/" rel="noopener noreferrer"&gt;Open specification&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;VentureBeat — &lt;a href="https://venturebeat.com/security/microsoft-salesforce-copilot-agentforce-prompt-injection-cve-agent-remediation-playbook" rel="noopener noreferrer"&gt;Microsoft patched a Copilot Studio prompt injection. The data exfiltrated anyway.&lt;/a&gt; — CVE-2026-21520 (CVSS 7.5, “ShareLeak”), patched January 2026, disclosed April 2026&lt;/li&gt;
&lt;li&gt;Pragmatiq — &lt;a href="https://www.pragmatiq.co.uk/12-practical-use-cases-for-microsoft-copilot-studio/" rel="noopener noreferrer"&gt;12 Practical Use Cases for Microsoft Copilot Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Holger Imbery — &lt;a href="https://holgerimbery.blog/multi-agent-orchestration" rel="noopener noreferrer"&gt;Copilot Studio Multi-Agent Orchestration (original 14-part series)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>copilotstudio</category>
      <category>multiagentorchestration</category>
    </item>
    <item>
      <title>Multi-Agent Orchestration with Copilot Studio — Part 1: Foundations</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-1-foundations-413k</link>
      <guid>https://dev.to/holgerimbery/multi-agent-orchestration-with-copilot-studio-part-1-foundations-413k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede.&lt;/strong&gt; This is the first of three articles on multi-agent orchestration in Microsoft Copilot Studio. Part 1 — Foundations — establishes the vocabulary, the decision criteria, and the configuration mechanics that every team needs before it touches a production design. It walks through five questions in order: why split a single agent into several, what a Copilot Studio agent is actually composed of, which orchestration patterns exist, how the Model Context Protocol (MCP) lets agents share tools, and how the Agent2Agent (A2A) protocol lets agents talk to other agents across platforms. The article closes with the concrete configuration steps for both standards as they exist in the product today, with the correct UI paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About this series.&lt;/strong&gt; This is Part 1 of three. &lt;strong&gt;Part 1 — Foundations&lt;/strong&gt; (this article) covers the vocabulary, when to split a single agent, the five configuration surfaces, the four orchestration patterns, and how MCP and A2A are configured. &lt;strong&gt;Part 2 — In Practice&lt;/strong&gt; turns those decisions into four end-to-end scenarios, a starter MCP server inventory, and ten production anti-patterns. Parts 1 and 2 describe the &lt;strong&gt;released, generally available feature set&lt;/strong&gt; — the “classic” Copilot Studio experience, built on &lt;strong&gt;generative orchestration&lt;/strong&gt; , which is GA and fully supported. &lt;strong&gt;Part 3 — The Build 2026 Rebuild&lt;/strong&gt; describes the new four-surface model (Skills, Memory, a new orchestrator); those features are &lt;strong&gt;in public preview and subject to change&lt;/strong&gt; before general availability, so treat Part 3 as forward-looking and re-check status before relying on it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every capability described in this article — connected agents, child agents, MCP integration with Streamable transport, A2A integration, autonomous triggers, Entra Agent ID, Copilot Hub, the Microsoft Foundry Agent Service — is documented on Microsoft Learn and is either generally available or in public preview, with the status called out where it matters. Three of the connected-agent types (Microsoft Foundry agents, Fabric Data agents, and agents built with the Microsoft 365 Agents SDK) are &lt;strong&gt;public preview&lt;/strong&gt; at the time of writing; connected Copilot Studio agents, MCP, and A2A are generally available. Where a feature is preview, this article says so.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Capability status at publication&lt;/strong&gt; Copilot Studio moves quickly, so the architecture below is anchored to current capability status. As of publication: &lt;strong&gt;A2A connections are generally available&lt;/strong&gt; ; &lt;strong&gt;Computer Use (computer-using agents) is generally available&lt;/strong&gt;, with embedding into workflows in preview; a &lt;strong&gt;redesigned Workflows experience&lt;/strong&gt; is in early release; &lt;strong&gt;per-agent Microsoft Entra agent identities&lt;/strong&gt; can be auto-created (preview); and an &lt;strong&gt;agent inventory schema&lt;/strong&gt; (preview) exposes every agent to the admin center, API, and Azure Resource Graph. These capabilities support the architecture in this article — they are noted inline where relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why read this&lt;/strong&gt; Read this if you are responsible for the shape of an AI build that has either started to misbehave or is about to. The single-agent-with-everything pattern looks fine for the first quarter of a project and fails predictably in the second. The terms in this article are the ones a solution architect, platform owner, or senior maker needs to discuss the failure with the team and pick a better shape. Read it if you have heard “we will just add another tool” three times in the same week, if your instruction block now scrolls, or if two different teams are editing the same agent without coordinating. Read it especially if a vendor or an article elsewhere has promised that MCP or A2A will “solve” multi-agent work — they will not, but they do remove enough integration duplication that the architectural decisions become the bottleneck again, which is where this article picks up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Foundations article is also where the corrections from the original series are applied: the correct UI path for adding A2A agents (the Agents page, not the Tools page), the current name and preview status of the connected-agent types, and the actual list of autonomous trigger types supported on Microsoft Learn. If you have been following the series and want the canonical version, this is it.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The drift that produces multi-agent work
&lt;/h2&gt;

&lt;p&gt;Most enterprise AI projects start with a single agent and end with a support ticket. The agent grows, picks up more tools, more instructions, more knowledge sources, and eventually starts choosing the wrong action, citing the wrong document, or refusing perfectly valid requests. Teams add prompt fragments to patch individual failures, the instruction block runs up against Copilot Studio’s documented &lt;strong&gt;8,000-character limit&lt;/strong&gt; for agent instructions, and nobody on the team can say with confidence why a specific response came out the way it did.&lt;/p&gt;

&lt;p&gt;Multi-agent orchestration is the architectural response to that drift. Instead of one general-purpose agent, the work is split across a small set of narrow agents, each with a clear scope, its own knowledge, and its own tools. An orchestrator chooses which specialist to call. This pattern is not new in distributed systems, but the tooling to apply it cleanly to conversational AI is new — and Microsoft Copilot Studio now provides it as a first-class capability.&lt;/p&gt;

&lt;p&gt;Five capabilities make multi-agent orchestration practical in Copilot Studio today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connected agents&lt;/strong&gt; — a separately published agent added to another agent as a callable capability. This can be another Copilot Studio agent in the same environment (generally available), or an external agent: an agent on the Microsoft Foundry Agent Service &lt;em&gt;(preview)&lt;/em&gt;, a Fabric Data Agent &lt;em&gt;(preview)&lt;/em&gt;, an agent built with the Microsoft 365 Agents SDK &lt;em&gt;(preview)&lt;/em&gt;, or any agent that speaks the A2A protocol. Each connected agent has its own lifecycle, authentication, owner, and can be reused across multiple calling agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Child agents&lt;/strong&gt; — lightweight sub-agents that live inside a parent agent and share its environment, tools, and knowledge. They are not independently published and are not intended for reuse outside the parent. (Earlier drafts of this series called these “inline agents”; Microsoft’s term is &lt;strong&gt;child agents&lt;/strong&gt; , and that is what this article uses.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP integration&lt;/strong&gt; — since 2025, Copilot Studio exposes a “Tools → Add a tool → New tool → Model Context Protocol” flow that takes a server URL, authentication settings, and automatically discovers the tools the server publishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A protocol support&lt;/strong&gt; — Copilot Studio can connect to any agent that speaks the open Agent2Agent protocol, enabling orchestration with agents hosted on other frameworks. A2A connections went generally available in April 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous agents&lt;/strong&gt; — event-triggered agents that act without a user turn, generally available since March 2025.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These capabilities are documented, configurable, and in production use at organizations including ABN AMRO, Rabobank, Holland America Line, T-Mobile, the City of Montréal, La Trobe University, Nexi Group, and Singapore Civil Defence Force.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. When to split a single agent
&lt;/h2&gt;

&lt;p&gt;The question is not whether multi-agent systems are better. The question is at what point a single agent stops being the right shape for the work.&lt;/p&gt;

&lt;p&gt;Copilot Studio gives makers a lot of room before that point is reached. A single agent can hold a substantial instruction block (up to the 8,000-character limit), hundreds of knowledge sources, and a growing list of actions. For many use cases — an FAQ bot over a policy library, a contained IT assistant with five connectors — one agent is the correct answer and will stay the correct answer for the life of the deployment.&lt;/p&gt;

&lt;p&gt;The problems begin when the agent’s scope expands informally. A new department asks if the existing agent can “also” handle their intake. A manager attaches another SharePoint site “for context.” An action is added because it was convenient. Each change is small; the cumulative effect is an agent with blurred responsibilities, inconsistent tone, and orchestration quality that degrades in ways that are hard to diagnose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Signals an agent has outgrown itself
&lt;/h3&gt;

&lt;p&gt;Microsoft’s guidance on multi-agent orchestration is explicit about the thresholds where quality starts to slip. The clearest signal is &lt;strong&gt;tool count&lt;/strong&gt;. The orchestrator ranks candidate tools at each turn; as the list grows, the probability of selecting the right one falls. Microsoft Learn’s &lt;em&gt;Add other agents overview&lt;/em&gt; states this directly: “this degradation in performance can happen when your main agent has more than 30-40 choices of action (tools, topics, and other agents).” Other signals are softer but equally real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The instruction block contains rules that contradict each other because different requirements were bolted on over time.&lt;/li&gt;
&lt;li&gt;Knowledge sources cover unrelated domains, and retrieval surfaces HR articles to IT questions.&lt;/li&gt;
&lt;li&gt;Response latency varies wildly because one path calls a millisecond lookup and another generates a multi-page report.&lt;/li&gt;
&lt;li&gt;Multiple owners now edit the same agent, each with different mental models.&lt;/li&gt;
&lt;li&gt;Testing one change risks regressing a behavior owned by a different team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When three or more of these are true, the agent is doing the work of what should be multiple agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  What splitting actually buys you
&lt;/h3&gt;

&lt;p&gt;Decomposing an agent is not free. It introduces a second artifact to maintain, an orchestration layer, and a contract between components. The benefits must be worth that cost, and they usually are in three ways.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;bounded context&lt;/strong&gt;. Each specialist agent can have a short instruction block, a small number of tools, and a knowledge base scoped to one domain. The orchestrator’s job is routing, not execution. Testing becomes possible because each agent has a well-defined input and output.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;independent ownership&lt;/strong&gt;. HR owns the HR agent; IT owns the IT agent; Finance owns the invoice agent. When HR needs to change the parental-leave policy, they update one knowledge source and one agent, with no risk to the IT triage behavior.&lt;/p&gt;

&lt;p&gt;Third, &lt;strong&gt;reuse&lt;/strong&gt;. A connected “Knowledge Base Lookup” agent can serve the Service Desk, the Sales Assistant, and the Field Technician agent without three teams each rebuilding the same tool integrations, prompts, and error handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  A decision checklist
&lt;/h3&gt;

&lt;p&gt;A practical rule for deciding whether to split:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Split when&lt;/strong&gt; the agent has multiple distinct owners, or the tool count is approaching 30, or two knowledge bases are pulling retrieval in conflicting directions, or SLA expectations differ between tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not split when&lt;/strong&gt; the problem is really that one knowledge source is outdated, or when the instructions simply need rewriting, or when the “additional” use case is a one-off topic that belongs in a Power Automate flow rather than a new agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cheapest intervention should always be tried first. A clean-up of instructions, a re-scoping of knowledge sources, or moving an over-loaded action into a Power Automate agent flow will often resolve what looked like a multi-agent problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Child or connected: a second decision
&lt;/h3&gt;

&lt;p&gt;Once the decision to split is made, Copilot Studio offers two options, and they serve different purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Child agents&lt;/strong&gt; are the right choice when the sub-agent exists only to factor complexity inside one parent. They share the parent’s environment, tools, and authentication. They are a first-class sub-agent type — you create them, give them their own instructions, and can define input and output variables — but they do not need to be reused, do not need to be independently owned, and simply make the parent easier to reason about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connected agents&lt;/strong&gt; are the right choice when the specialist is an independent unit: it has its own owner, its own release cadence, its own authentication model, its own model selection, or it will be called from more than one calling agent. Connected agents can be other Copilot Studio agents, Fabric Data Agents for governed analytics &lt;em&gt;(preview)&lt;/em&gt;, agents on the Microsoft Foundry Agent Service &lt;em&gt;(preview)&lt;/em&gt;, or agents built with the Microsoft 365 Agents SDK &lt;em&gt;(preview)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The two are grounded in Microsoft’s own guidance. The table below summarizes the trade-offs that matter most — control, context, latency, and reuse.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Child agent&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Connected agent&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A lightweight sub-agent &lt;strong&gt;inside&lt;/strong&gt; the parent agent&lt;/td&gt;
&lt;td&gt;A &lt;strong&gt;separately published&lt;/strong&gt; agent — another Copilot Studio agent, or an external agent over A2A, Microsoft Foundry &lt;em&gt;(preview)&lt;/em&gt;, Fabric &lt;em&gt;(preview)&lt;/em&gt;, or the M365 Agents SDK &lt;em&gt;(preview)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context / orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shares the &lt;strong&gt;parent’s&lt;/strong&gt; environment, authentication, and orchestration context&lt;/td&gt;
&lt;td&gt;Runs its &lt;strong&gt;own orchestration layer&lt;/strong&gt; — its own reasoning pass over its own tools and knowledge. The parent hands off; the connected agent decides independently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context window&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logic lives inside the parent’s boundary; use child agents to &lt;strong&gt;split a long instruction set into focused pieces&lt;/strong&gt; under the 8,000-character ceiling&lt;/td&gt;
&lt;td&gt;Each connected agent carries its &lt;strong&gt;own&lt;/strong&gt; instructions, knowledge, tools — and can use a &lt;strong&gt;different model&lt;/strong&gt; — so it has its own context budget and strong isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tight coupling; the parent owns config, auth, and lifecycle. Supports &lt;strong&gt;input/output variables&lt;/strong&gt; and can be referenced in instructions with &lt;code&gt;/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Loose coupling; the connected agent owns its settings, model, ALM, and channels. You steer delegation only through its &lt;strong&gt;description and input contract&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lower — no extra orchestration hop&lt;/td&gt;
&lt;td&gt;Higher — each delegation adds an &lt;strong&gt;orchestration hop&lt;/strong&gt; (Microsoft explicitly flags the added latency)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reuse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not reusable outside the parent; not independently published&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Reusable&lt;/strong&gt; across many parents; independently published and owned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Governance surface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimal extra surface&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Larger&lt;/strong&gt; testing, management, and governance surface; each connection is an inventoried dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use when&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single use case, one team or developer, you just want to group tools/instructions/knowledge cleanly, no separate auth/deploy/reuse&lt;/td&gt;
&lt;td&gt;Multiple teams own different agents, separate publishing/ALM, dedicated settings such as a different model, or you want the agent reusable across more than one parent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remove via&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;“Delete”&lt;/td&gt;
&lt;td&gt;“Disconnect agent”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two caveats from the documentation are worth keeping in mind. First, an agent that already has connected agents cannot itself be added as a connected agent — nesting is one level deep. Second, citations are not always preserved when outputs pass back from a called agent to the caller, which is one more reason to prefer structured returns over prose (a theme that recurs throughout Part 2).&lt;/p&gt;

&lt;p&gt;ABN AMRO’s published Copilot Studio work is consistent with this discipline: the case study describes enhancing customer and employee interactions using Copilot Studio together with Azure services. The architectural lesson to import — bounded agents plus governed data access — is the kind of pattern that makes outcomes reproducible across customer and employee scenarios, even though the case study reports the outcome rather than the internal decomposition. The City of Montréal’s citizen-engagement work points the same way: Copilot Studio used to improve information access and citizen engagement, the kind of scenario where a public-facing agent benefits from delegating to a specialist rather than holding every city process inside one prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Agent anatomy: the five configuration surfaces
&lt;/h2&gt;

&lt;p&gt;Before multi-agent work begins, it helps to be precise about what a single Copilot Studio agent actually contains. Makers who started with Power Virtual Agents sometimes carry forward a mental model built around topics and dialogs; makers who came from Azure OpenAI Studio sometimes carry forward a mental model built around system prompts and function calls. A modern Copilot Studio agent is neither of those alone. It is a composition of five distinct surfaces, each with different runtime behavior and different design trade-offs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instructions&lt;/strong&gt; — the natural-language description of the agent’s role, constraints, tone, and output preferences. Instructions are injected into every turn, up to a documented limit of 8,000 characters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge&lt;/strong&gt; — the structured and unstructured data the agent can retrieve from, including SharePoint sites, Dataverse tables, uploaded files, public websites, Microsoft 365 Graph connectors, enterprise search sources, and — newly — the Work IQ service &lt;em&gt;(preview)&lt;/em&gt; for real-time Microsoft 365 work context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — the executable capabilities the agent can invoke: connector actions, Power Automate flows, Dataverse actions, MCP-exposed tools, and other agents (child or connected) used as tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Topics&lt;/strong&gt; — deterministic, authored conversation paths triggered by phrases, events, or redirections from other topics. Topics are where you place behavior that must be reproducible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triggers&lt;/strong&gt; — what causes the agent to run at all. Beyond user messages, Copilot Studio’s documented event triggers include SharePoint, OneDrive, Planner, Recurrence (schedule), and Dataverse row-change triggers; an HTTP request trigger and Power Automate cloud flows can extend the catalog where a native trigger does not yet exist.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Instructions: judgment-based behavior
&lt;/h3&gt;

&lt;p&gt;Instructions are the place for behavior that depends on context and cannot be fully specified in advance. Good instructions describe the agent’s purpose, its refusal rules, its preferred output format, and any constraints it must honor. They should not contain large tables of if-this-then-that logic; that is what topics are for.&lt;/p&gt;

&lt;p&gt;A healthy instruction block is rarely more than a page, and Copilot Studio enforces an 8,000-character ceiling regardless. Once instructions grow toward that limit, two things happen: the probability that the agent follows any individual rule drops, and the cost per turn rises. Copilot Studio’s generative orchestration picks up the instructions automatically; no separate system prompt editing is required. When a single instruction block genuinely needs more structure, splitting focused pieces into child agents (each referenced from the parent’s instructions with &lt;code&gt;/&lt;/code&gt;) is the documented way to stay under the ceiling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge: scoped retrieval beats wide retrieval
&lt;/h3&gt;

&lt;p&gt;Copilot Studio supports a long list of knowledge sources. The mistake that repeats in production is attaching too many. Retrieval quality on a tightly scoped SharePoint library is almost always better than retrieval across an entire tenant, because the signal-to-noise ratio is higher and ranking works against fewer near-duplicates.&lt;/p&gt;

&lt;p&gt;A documented example is Dunaway, a firm whose Copilot Studio agent answers city-code questions. The published case study is explicit that they scoped knowledge to the specific regulatory libraries that mattered, rather than pointing the agent at every document the firm could access. The outcome — fast, accurate regulatory answers — depended on that scoping.&lt;/p&gt;

&lt;p&gt;Graph connectors are the right choice when the source is not already in SharePoint or Dataverse. Websites work, but are best reserved for public reference material where currency matters more than precision. Uploaded files are fine for stable documents but awkward for anything that changes; preferable to store those in SharePoint and let the agent retrieve them from there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools: the surface that most affects orchestration quality
&lt;/h3&gt;

&lt;p&gt;Every tool you add to an agent is a candidate the orchestrator must consider at every turn. Tools fall into several categories in Copilot Studio today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prebuilt connector actions&lt;/strong&gt; — from Microsoft’s catalog of 1,000+ connectors, including Microsoft 365 services and major SaaS platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power Automate cloud flows&lt;/strong&gt; — any existing flow can be promoted to a tool, which keeps complex orchestration logic out of the agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent flows&lt;/strong&gt; — a visual, AI-assisted workflow designer that blends deterministic steps with generative reasoning, triggered by Dataverse events, schedules, or HTTP calls. (A redesigned Workflows experience, in early release, is the evolution of this surface — see the “What’s new” note above.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tools&lt;/strong&gt; — tools exposed by an MCP server, discovered automatically once the server is connected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other agents as tools&lt;/strong&gt; — child or connected agents added to the agent’s list of callable specialists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical guidance is to treat tool descriptions as first-class design artifacts. The orchestrator selects tools largely from their descriptions; a vague description produces vague routing. A one-sentence description that explains &lt;em&gt;when to use this tool, what it returns, and any side effects&lt;/em&gt; is worth more than a long paragraph that describes the implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Topics: the place for reproducibility
&lt;/h3&gt;

&lt;p&gt;Topics are the most under-used surface in modern Copilot Studio builds. Makers arriving from the LLM side sometimes treat everything as an instruction, and then are surprised when behavior they need to be deterministic — an escalation path, a compliance disclosure, a specific regulatory script — varies between conversations.&lt;/p&gt;

&lt;p&gt;Topics execute as authored. They can include message nodes, condition nodes, generative AI nodes, and action calls. If a behavior must be reproducible for audit or compliance reasons, put it in a topic. Rabobank’s published conversational banking work — text and voice-enabled conversational AI in a regulated banking context — is the kind of scenario where authored flows for regulated interactions sit alongside generative handling of the softer surrounding conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Triggers: what makes an agent autonomous
&lt;/h3&gt;

&lt;p&gt;The default trigger is a user message. Since March 2025, Copilot Studio supports autonomous triggers — an agent can be woken by a Dataverse row change, a SharePoint document event, a OneDrive event, a Planner change, a scheduled (Recurrence) trigger, or an HTTP call. Where a native trigger does not exist for the desired source, a Power Automate cloud flow that subscribes to that source can write into Dataverse and let the Dataverse row-change trigger wake the agent. These triggers are what make “autonomous agents” possible: the agent is still described by the same five surfaces, but it does not need a user to start it.&lt;/p&gt;

&lt;p&gt;A security note that Part 2 develops further: event triggers run with the agent maker’s credentials, and trigger payloads can carry untrusted content into the agent’s context. This is exactly the surface that CVE-2026-21520 (a SharePoint-form indirect prompt-injection issue patched in January 2026) exploited. Validate payloads and scope what a trigger can activate.&lt;/p&gt;

&lt;p&gt;Singapore Civil Defence Force’s published case study includes autonomous processes that run without user interaction. The savings reported in that case study — described as multi-million-dollar — come from that automation running continuously against existing business events, not from a human chatting with a bot.&lt;/p&gt;

&lt;h3&gt;
  
  
  How these surfaces interact in a multi-agent system
&lt;/h3&gt;

&lt;p&gt;When you split an agent, you are really deciding how each surface gets redistributed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instructions&lt;/strong&gt; shrink, because each specialist has a narrower role.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge&lt;/strong&gt; separates by domain, so retrieval becomes sharper.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; concentrate in the specialists; the orchestrator holds few direct tools beyond the ability to call its agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Topics&lt;/strong&gt; tend to live in specialists, where reproducibility matters for specific business flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triggers&lt;/strong&gt; vary: the orchestrator is typically user-triggered, while specialists are often called-only; autonomous triggers live on individual specialists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. The four orchestration patterns
&lt;/h2&gt;

&lt;p&gt;With the building blocks clear, the next question is how to arrange them. There are four patterns that cover the vast majority of enterprise multi-agent work, and all four can be implemented today in Copilot Studio using generative orchestration together with connected agents, child agents, and agent flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1 — Router-worker
&lt;/h3&gt;

&lt;p&gt;A thin parent agent classifies each incoming request and delegates to a specialist. The parent does almost no execution itself; its job is routing. The specialists do the work and return results. The parent optionally reformulates the response into the conversational style the user expects.&lt;/p&gt;

&lt;p&gt;Router-worker is the default pattern for internal service desks, multi-tenant assistants, and any situation where requests fall into a small, stable set of categories. The strength of this pattern is operational: each specialist is small enough to debug, and changes to one specialist do not risk regressing the others.&lt;/p&gt;

&lt;p&gt;In Copilot Studio, the router is a standard agent with connected agents added on the Agents page. The orchestrator’s built-in tool selection handles the routing, provided each connected agent has a clear, narrow description. No custom code is required.&lt;/p&gt;

&lt;p&gt;Nexi Group’s published case study describes exactly this shape: a front-end agent that delegates card-service queries to specialists, reducing contact-center workload while keeping the interaction consistent for the customer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 2 — Sequential pipeline
&lt;/h3&gt;

&lt;p&gt;Agent A’s output becomes Agent B’s input, which becomes Agent C’s input, and so on. Each stage applies a transformation that depends on the previous one.&lt;/p&gt;

&lt;p&gt;Sequential pipelines are the natural shape for review workflows: intake → analysis → recommendation → approval. They are also common in content-generation workflows, where one agent drafts, another edits, and a third formats.&lt;/p&gt;

&lt;p&gt;In Copilot Studio, sequential pipelines are typically built with agent flows, because agent flows give you explicit control over step order, conditional branching, and error handling. Individual steps can call connected agents, generative prompts, or deterministic actions. Agent flows also support human-in-the-loop approvals, which sequential pipelines frequently need at the decision point.&lt;/p&gt;

&lt;p&gt;Sequential work is where the discipline of structured outputs matters most. If step three has to parse prose from step two, the pipeline breaks quietly the first time the phrasing changes. Each step should return a structured object — JSON or a typed record — rather than a narrative.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 3 — Parallel fan-out / fan-in
&lt;/h3&gt;

&lt;p&gt;The parent calls N specialists concurrently, waits for all of them, and then merges the results. This pattern is used when a single request needs enrichment from several independent sources, none of which depends on another.&lt;/p&gt;

&lt;p&gt;Typical enterprise examples: enriching a customer record by calling a CRM lookup, an ERP balance check, and a support history lookup at the same time; running legal, finance, and risk review of a contract in parallel; pulling inventory, shipping, and pricing in parallel for a quoting workflow.&lt;/p&gt;

&lt;p&gt;Agent flows in Copilot Studio support parallel branches explicitly. For cases where the parallelism is between full agents rather than actions, Power Automate remains a direct alternative: each branch calls an agent, and a final step aggregates the results. The parent agent then presents the merged output.&lt;/p&gt;

&lt;p&gt;The complexity to watch for is timeout and partial-failure behavior. Parallel patterns fail well only if you decide, before the first implementation, what happens when one of the N branches times out or errors. “Return what we have and note what is missing” is a more robust default than “fail the whole request.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 4 — Hierarchical (supervisor / sub-orchestrators)
&lt;/h3&gt;

&lt;p&gt;A supervisor agent decomposes a goal into subgoals and delegates each to a sub-orchestrator, which in turn delegates to its own specialists. This pattern is used for long-running processes that span departments, such as employee onboarding, incident post-mortems, or multi-step audits.&lt;/p&gt;

&lt;p&gt;The supervisor tracks state across time — usually in Dataverse — and is often an autonomous agent rather than a conversational one. Each sub-orchestrator updates its own step on completion, and the supervisor polls for progress or reacts to Dataverse events.&lt;/p&gt;

&lt;p&gt;Copilot Studio supports the hierarchical pattern through the combination of connected agents (for delegation), autonomous triggers (for event-driven progress), and Dataverse tables (for shared state). The durable choice for a long-running process is to store orchestration state in Dataverse rather than in conversation history, which truncates — persist state outside the conversation, not inside it. For agent-flow steps that genuinely run long, asynchronous responses &lt;em&gt;(preview)&lt;/em&gt; now let a flow exceed the two-minute limit and return results when it completes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choosing between the patterns
&lt;/h3&gt;

&lt;p&gt;A short checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If requests split cleanly into categories and there is little cross-dependency, use &lt;strong&gt;router-worker&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If work must happen in a specific order with each step depending on the previous, use &lt;strong&gt;sequential pipeline&lt;/strong&gt; (agent flows).&lt;/li&gt;
&lt;li&gt;If several independent lookups or reviews can happen at once, use &lt;strong&gt;parallel fan-out / fan-in&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If the process spans days, involves multiple departments, and needs state that outlives any single conversation, use &lt;strong&gt;hierarchical&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is common for a real system to use more than one pattern. A customer-service agent might use router-worker at the top level, then have a sequential pipeline for complaint handling as one of its specialists, with a parallel enrichment step inside that pipeline. The goal is not architectural purity; it is picking the simplest pattern for each piece.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three pattern anti-patterns
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Circular delegation.&lt;/strong&gt; Agent A calls Agent B, which calls Agent A back. Copilot Studio does not prevent this structurally, and it leads to long, expensive conversations that loop until a timeout. Rule: child agents never call back into their parents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fan-out without merge.&lt;/strong&gt; The parent fires five parallel requests but does not wait for all results before responding, so the conversation becomes out-of-order. In agent flows, always use a “join” step before the aggregation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical without state.&lt;/strong&gt; A supervisor that tracks state in the conversation window will lose it the moment the conversation is truncated. Long-running processes must persist state outside the conversation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Copilot Studio provides the runtime — generative orchestration, tool selection, topic execution, agent-flow execution, autonomous triggers. It does not choose the pattern for you. The choice of pattern, the decision of which agent owns which responsibility, the contract between steps, and the handling of partial failures are all design decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Model Context Protocol (MCP) in plain terms
&lt;/h2&gt;

&lt;p&gt;Two problems surface in any organization that has built more than a few agents. First, every agent builder reimplements the same integrations — Jira search, SharePoint lookup, ticket creation — in their own style, with their own error handling. Second, when a backend API changes, every agent that depends on it has to be updated individually. These are not AI problems; they are classic enterprise integration problems that the rise of agents has made more visible.&lt;/p&gt;

&lt;p&gt;MCP is the open standard that addresses both. It was originally published by Anthropic in late 2024, is now adopted by multiple agent platforms, and is supported natively in Microsoft Copilot Studio since 2025. For Copilot Studio makers, understanding MCP is less about protocol details and more about what the standard allows you to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  What MCP actually is
&lt;/h3&gt;

&lt;p&gt;MCP is a specification for how an AI client (an agent) discovers and calls tools hosted on a separate server. The specification defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A uniform way for the server to describe the tools it offers (name, description, input schema, output schema).&lt;/li&gt;
&lt;li&gt;A uniform way for the client to invoke a tool and receive a structured response.&lt;/li&gt;
&lt;li&gt;Support for authentication, including OAuth 2.0 flows.&lt;/li&gt;
&lt;li&gt;Support for streaming responses, which matters for long-running tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical consequence is that a single MCP server can expose a set of tools — search, create, update, delete against whatever backend — and any MCP-aware client can consume those tools without bespoke integration work.&lt;/p&gt;

&lt;p&gt;Copilot Studio today supports the Streamable transport for MCP. (SSE, an earlier transport, was deprecated and is no longer supported after August 2025.) Authentication options include none, API key (either in a header or a query parameter), and OAuth 2.0 with three configuration modes: dynamic discovery, dynamic client registration, and manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why MCP matters for Copilot Studio
&lt;/h3&gt;

&lt;p&gt;Before MCP, extending an agent with a custom backend required building a Power Platform custom connector — writing an OpenAPI definition, handling authentication, registering the connector, and then adding individual actions to the agent. Each action was defined at the connector level, which meant versioning, deprecation, and permissions were all managed per connector.&lt;/p&gt;

&lt;p&gt;With MCP, the server owns the tool catalog. When you connect an MCP server to a Copilot Studio agent, the server’s tools are discovered automatically. When the server adds a new tool, it becomes available to the agent without any change in Copilot Studio. When the server deprecates a tool, the change is visible server-side rather than scattered across agents.&lt;/p&gt;

&lt;p&gt;For enterprises with many agents and many backends, this inverts a maintenance problem. Integration code moves to one server per domain, owned by the team that owns the backend. The agents consume it; they do not redefine it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What MCP is not
&lt;/h3&gt;

&lt;p&gt;MCP is not an agent-to-agent protocol. It describes how agents call tools, not how agents call each other. For agent-to-agent communication, the relevant standard is A2A.&lt;/p&gt;

&lt;p&gt;MCP is also not a replacement for Power Platform connectors. Connectors remain the right choice when the backend requires complex per-user licensing, deep Dataverse integration, or features that benefit from the Power Platform management surface. MCP is the right choice when the backend is a discrete service with a stable API surface that multiple agents need to share. (Note that in Copilot Studio, MCP connectivity itself rides on Power Platform connectors, so connector-level data policies still govern MCP access.)&lt;/p&gt;

&lt;p&gt;Finally, MCP is not, by itself, a security model. Any MCP server you connect must still enforce authentication and authorization; MCP defines the envelope, not the access rules. Recent public reporting on prompt-injection classes of vulnerability in agent platforms — including CVE-2026-21520, an indirect prompt-injection issue patched in Copilot Studio in January 2026 — underlines that adding tools of any kind, MCP or otherwise, expands an agent’s attack surface. Tools that write data deserve particular scrutiny.&lt;/p&gt;

&lt;h3&gt;
  
  
  A common pattern: the shared knowledge MCP
&lt;/h3&gt;

&lt;p&gt;A frequent pattern in enterprise Copilot Studio deployments is a shared “knowledge retrieval” MCP server. It exposes tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_policy(query, domain)&lt;/code&gt; — returns matching policy passages with citations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_policy(policy_id)&lt;/code&gt; — returns the full text of a policy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_policy_versions(policy_id)&lt;/code&gt; — returns version history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of the organization’s agents — HR assistant, IT assistant, customer service assistant, compliance assistant — connects to this one MCP server and uses whichever tools it needs. When a new policy domain is added, it appears in all agents at once. When authentication is rotated, it rotates in one place. When a tool description is improved, every agent benefits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring an MCP server in Copilot Studio — the wizard path
&lt;/h3&gt;

&lt;p&gt;Microsoft Copilot Studio offers more than one path to connect an MCP server. The native onboarding wizard, introduced in 2025, is the recommended path for most cases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open the Tools page of your agent.&lt;/strong&gt; Every agent has a Tools tab alongside Knowledge, Topics, Instructions, and Agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select Add a tool → New tool → Model Context Protocol.&lt;/strong&gt; This opens the MCP onboarding wizard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide the server details.&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Server name&lt;/em&gt; — a short name; this is what makers see when they browse tools.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Server description&lt;/em&gt; — important. The description is what the orchestrator uses at runtime to decide whether to call this server. Be specific about what the server is for and what kinds of requests it handles.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Server URL&lt;/em&gt; — the base HTTPS endpoint of the MCP server. The Streamable transport is current; SSE is no longer supported after August 2025.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure authentication.&lt;/strong&gt; Three options: 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;None&lt;/em&gt; — for read-only servers on trusted networks only.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;API key&lt;/em&gt; — in a request header or as a query parameter. The agent includes it in requests to the MCP server.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;OAuth 2.0&lt;/em&gt; — preferred for anything involving identity. Three sub-options: &lt;em&gt;dynamic discovery&lt;/em&gt; (simplest; works when the server supports OAuth 2.0 dynamic client registration with discovery), &lt;em&gt;dynamic&lt;/em&gt; (DCR without discovery; you supply the authorization and token URLs), and &lt;em&gt;manual&lt;/em&gt; (you supply client ID, client secret, authorization, token, and refresh endpoints explicitly).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create the connection.&lt;/strong&gt; The wizard validates the server, pulls the tool catalog, and registers the tools as available to the agent. Each tool appears in the agent’s tool list with its declared schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the entire configuration path for the common case. The effort goes into writing good tool descriptions on the server side, not into configuring the client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring an MCP server — the custom connector path
&lt;/h3&gt;

&lt;p&gt;Before the native MCP integration, makers built a Power Apps custom connector with a specific &lt;code&gt;x-ms-agentic-protocol: mcp-streamable-1.0&lt;/code&gt; annotation. This path still works and is the right choice when you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic value lookups that feed MCP parameters from another API.&lt;/li&gt;
&lt;li&gt;Custom URL rewriting (for example, to route one connector to multiple regional MCP endpoints based on a catalog service).&lt;/li&gt;
&lt;li&gt;Fine-grained policy controls expressed at the Power Platform connector level, such as per-environment availability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Microsoft sample published in March 2026, “Dynamic MCP Routing in Copilot Studio,” uses exactly this approach: a single connector that resolves an instance dropdown via a catalog service and rewrites the URL at runtime. It is a useful reference for multi-tenant or multi-region requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring an MCP server — the Agents 365 (BYO MCP) path
&lt;/h3&gt;

&lt;p&gt;A third path now exists for organizations standardizing on tenant-wide agent management: you can register an existing MCP server in &lt;strong&gt;Agents 365&lt;/strong&gt; using the Agents 365 CLI and the Microsoft 365 Admin Center. Once the server is registered and approved, it becomes available for use in Copilot Studio. This is the right path when MCP servers need to be governed centrally as bring-your-own (BYO) assets rather than connected ad hoc per agent.&lt;/p&gt;

&lt;p&gt;Unless one of the custom-connector requirements applies — or you specifically want centralized Agents 365 governance — the wizard path is simpler and has fewer moving parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool descriptions are the production variable
&lt;/h3&gt;

&lt;p&gt;One thing deserves emphasis, because it determines success in production more than any configuration detail: the description of each MCP tool, authored on the server. A tool description in MCP should state, clearly and concisely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the tool does.&lt;/li&gt;
&lt;li&gt;When the agent should use it (which kinds of requests).&lt;/li&gt;
&lt;li&gt;What it returns.&lt;/li&gt;
&lt;li&gt;Any side effects (writes data, sends messages, charges money).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A description like “Search items” is nearly useless to the orchestrator. “Searches the internal policy library for HR, IT, and compliance policies; returns matching passages with citations; read-only” is specific enough that the orchestrator will route appropriately. When orchestration quality feels off — the agent is calling the wrong tool, or no tool at all — the first place to look is usually the descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The Agent2Agent (A2A) protocol
&lt;/h2&gt;

&lt;p&gt;If MCP is how agents talk to tools, A2A is how agents talk to other agents. It is a separate open standard with its own specification, and — like MCP — it is supported natively in Microsoft Copilot Studio. A2A connections went generally available in April 2026. For multi-agent architectures that span platforms, teams, or vendors, A2A is the piece of the puzzle that keeps the system composable.&lt;/p&gt;

&lt;h3&gt;
  
  
  When A2A is relevant
&lt;/h3&gt;

&lt;p&gt;A Copilot Studio agent can already call another Copilot Studio agent as a connected agent — that works entirely inside the Microsoft stack. A2A becomes relevant when the other agent is &lt;em&gt;not&lt;/em&gt; a Copilot Studio agent. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An agent built with the Microsoft 365 Agents SDK in code.&lt;/li&gt;
&lt;li&gt;An agent hosted on the Microsoft Foundry Agent Service.&lt;/li&gt;
&lt;li&gt;An agent built on a non-Microsoft framework (LangGraph, CrewAI, Google’s own A2A-compliant agents).&lt;/li&gt;
&lt;li&gt;A partner’s agent exposed to your organization as a service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before A2A, connecting to such an agent meant writing a custom HTTP integration — handling the request shape, interpreting streaming responses, mapping authentication, and dealing with session state. A2A standardizes the contract so that any A2A-compliant client can talk to any A2A-compliant agent with no custom code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the protocol defines
&lt;/h3&gt;

&lt;p&gt;Microsoft Learn describes A2A as “an open standard for communication and collaboration between agents.” The specification covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A standard contract for &lt;strong&gt;sending tasks&lt;/strong&gt; to an external agent.&lt;/li&gt;
&lt;li&gt;A mechanism for providing &lt;strong&gt;rich, structured metadata&lt;/strong&gt; with the request — context, user identity, task parameters.&lt;/li&gt;
&lt;li&gt;A predictable &lt;strong&gt;response format&lt;/strong&gt; , including support for multi-turn interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interoperability across frameworks&lt;/strong&gt; , so an agent built on any A2A-compliant platform can be called the same way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compared to a traditional HTTP connector — which is generic and was not designed for agent workflows — A2A is explicitly designed for the shape of agent interactions: multi-turn interactions and rich contextual metadata work natively, where an HTTP connector requires you to build those capabilities yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring an A2A agent in Copilot Studio — the correct path
&lt;/h3&gt;

&lt;p&gt;External agents, including A2A-compliant agents, are added on the &lt;strong&gt;Agents page&lt;/strong&gt; of the calling agent — not the Tools page. The Tools page is for MCP servers and connector-backed tools; the Agents page is where connected agents (Copilot Studio, Fabric Data Agent, Microsoft Foundry Agent Service, Microsoft 365 Agents SDK) and external A2A agents are registered.&lt;/p&gt;

&lt;p&gt;The configuration steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obtain the target agent’s A2A endpoint URL and authentication requirements from whoever owns it.&lt;/li&gt;
&lt;li&gt;In the calling agent, open the &lt;strong&gt;Agents&lt;/strong&gt; page.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add an agent → Connect to an external agent → Agent2Agent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide the A2A endpoint URL. If the agent publishes a valid agent card at the standard &lt;code&gt;.well-known&lt;/code&gt; URL, Copilot Studio auto-populates the name and description; otherwise enter them manually. The description tells the orchestrator when to delegate to this agent.&lt;/li&gt;
&lt;li&gt;Configure authentication. The options are &lt;strong&gt;None&lt;/strong&gt; , &lt;strong&gt;API key&lt;/strong&gt; (header or query parameter), and &lt;strong&gt;OAuth 2.0&lt;/strong&gt; (client ID, client secret, authorization URL, token URL, refresh URL). For enterprise scenarios, OAuth 2.0 paired with Entra ID is the sensible choice.&lt;/li&gt;
&lt;li&gt;Create the connection and save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once registered, the A2A agent appears in the Agents list alongside connected Copilot Studio agents. The orchestrator invokes both kinds through the same delegation mechanism at runtime; only the configuration differs.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to use A2A versus connected agents
&lt;/h3&gt;

&lt;p&gt;A useful rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If both agents live in your Copilot Studio tenant, &lt;strong&gt;connected agents&lt;/strong&gt; is the simpler choice. Lifecycle, authentication, and governance are all inside Power Platform.&lt;/li&gt;
&lt;li&gt;If the other agent is built outside Copilot Studio — in code with the Microsoft 365 Agents SDK, on the Microsoft Foundry Agent Service, on another platform, or by a partner — &lt;strong&gt;A2A&lt;/strong&gt; is the way to call it without custom plumbing.&lt;/li&gt;
&lt;li&gt;If you want the same agent to be callable from Copilot Studio, from a custom app, and from another vendor’s agent, &lt;strong&gt;publishing it as an A2A agent&lt;/strong&gt; turns it into a reusable unit across clients.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The two are not mutually exclusive. Many production systems mix: the orchestrator in Copilot Studio calls connected agents for Copilot-native specialists and A2A agents for specialists hosted elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three rules for robust agent-to-agent calls
&lt;/h3&gt;

&lt;p&gt;These apply equally to connected agents and A2A agents.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Return structured data, not prose.&lt;/strong&gt; The calling agent should not parse “I created ticket INC-12345 for you” to extract the ID. Design the called agent to return a structured result. Agent flows, connected agents, and A2A agents in Copilot Studio all support structured return types; use them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the called agent idempotent.&lt;/strong&gt; Retries must not create duplicate records. Every agent-to-agent call that writes data should accept an idempotency key and use it to deduplicate on the server side. This is particularly important for agents that create tickets, send email, or post messages, because retries are common under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bound the conversation.&lt;/strong&gt; A called agent should not call back into the calling agent. Structurally it is possible; in practice it produces loops that are expensive and hard to debug. Design the contract so the called agent has everything it needs as inputs, does its work, and returns.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Multi-turn versus single-turn
&lt;/h3&gt;

&lt;p&gt;A2A supports both. Some tasks are single-turn — “look up this policy and return the passage.” Others are genuinely multi-turn — “help this user configure their integration, with clarifying questions as needed.” The A2A payload Copilot Studio sends includes a context ID, message IDs, locale, and full chat history, which makes multi-turn continuity possible.&lt;/p&gt;

&lt;p&gt;Single-turn is the default and should be preferred when it applies. Multi-turn introduces state, which then has to be tracked somewhere — usually by the caller. For long-running processes, the hierarchical pattern with state stored in Dataverse is usually a better fit than keeping multi-turn state inside the A2A exchange.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security considerations for A2A
&lt;/h3&gt;

&lt;p&gt;The security model for A2A is the same concern that applies to any tool: the called agent is now part of your system’s trust boundary. A few practical implications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The called agent’s identity matters. In Entra-governed tenants, use Entra Agent ID — first introduced in May 2025 and expanded to public preview at Ignite 2025 — to give each agent a first-class identity with scoped permissions. Copilot Studio can now auto-create a per-agent Entra identity &lt;em&gt;(preview)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Scopes should be narrow. An agent that exists to summarize documents does not need write access to email.&lt;/li&gt;
&lt;li&gt;Audit everything. Purview audit logs cover Copilot Studio activity; treat calls to external A2A agents the same way you would treat any outbound API call — logged, reviewed, and alertable. You are explicitly responsible for the data flows, quality, and security posture of agents you connect outside Copilot Studio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Wiring child, connected, and A2A agents — all three configuration paths
&lt;/h2&gt;

&lt;p&gt;Agent-to-agent delegation in Copilot Studio uses one of three mechanisms depending on where the called agent lives. Getting the mechanism right is what keeps the design from leaking through the architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring a child agent
&lt;/h3&gt;

&lt;p&gt;Child agents are authored inside the parent agent. In current Copilot Studio they are a first-class sub-agent type — not merely topics — with their own instructions and, optionally, their own input and output variables.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the parent agent, open the &lt;strong&gt;Agents&lt;/strong&gt; page and create a child agent named after its responsibility (e.g., “Translate Text,” “Validate Expense Code,” “Summarize Ticket”).&lt;/li&gt;
&lt;li&gt;Author its instructions and, where useful, define input and output variables so the parent can pass values in and read results out.&lt;/li&gt;
&lt;li&gt;Give it a clear description so the orchestrator can route to it. You can also reference it directly in the parent’s instructions by typing &lt;code&gt;/&lt;/code&gt; and selecting it.&lt;/li&gt;
&lt;li&gt;Save; the child agent is immediately available within the parent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Child agents share the parent’s tools, knowledge, and authentication, and there is no separate lifecycle. If you later need to reuse the child agent elsewhere, promote its logic into a connected agent. (You can also explicitly redirect to a child agent from within a topic using the Redirect node, which resumes the originating topic when the child agent finishes.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring a connected agent
&lt;/h3&gt;

&lt;p&gt;A connected agent is a separately-published Copilot Studio agent (or a Fabric Data Agent &lt;em&gt;(preview)&lt;/em&gt;, an agent on the Microsoft Foundry Agent Service &lt;em&gt;(preview)&lt;/em&gt;, or one built with the Microsoft 365 Agents SDK &lt;em&gt;(preview)&lt;/em&gt;) that this agent calls.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure the target agent is published in the same environment and that you have permissions to use it.&lt;/li&gt;
&lt;li&gt;In the calling agent, open the &lt;strong&gt;Agents&lt;/strong&gt; page → &lt;strong&gt;Add an agent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the target agent from the list of available agents in the environment.&lt;/li&gt;
&lt;li&gt;Provide a short description of &lt;em&gt;when&lt;/em&gt; the calling agent should delegate to this agent. This description, distinct from the target agent’s own description, is what the orchestrator uses to decide.&lt;/li&gt;
&lt;li&gt;Define the input contract: what the calling agent will pass. Keep this to the minimum needed.&lt;/li&gt;
&lt;li&gt;Define the expected return shape. Connected agents that return structured data are easier to compose; prefer structured returns to prose.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A typical example: a “master” agent that routes HR questions to an HR agent and IT questions to an IT agent. Each specialist is a connected agent in its own right. The master holds only routing logic and a short “what I am” instruction. Each specialist holds its own knowledge (HR policies versus IT runbooks), its own tools (Workday connector versus ServiceNow connector), and its own owner.&lt;/p&gt;

&lt;p&gt;Remember the one-level nesting rule: an agent that already has connected agents can be a main agent, but cannot itself be added as a connected agent to another main agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting to a Fabric Data Agent
&lt;/h3&gt;

&lt;p&gt;Fabric Data Agents &lt;em&gt;(preview)&lt;/em&gt; are a specific type of connected agent that brings governed, schema-aware analytics into a conversational flow. They are configured the same way as any other connected agent, but the target is a Fabric Data Agent published in your Fabric environment.&lt;/p&gt;

&lt;p&gt;The practical value is that the agent can answer data questions with governed retrieval — row-level security, sensitivity labels, and column-level policies all apply — without the calling agent having to reimplement those controls. (Note a current limitation: Fabric Data agents can’t be reached via the topic Redirect node or referenced directly in instructions.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring an A2A agent
&lt;/h3&gt;

&lt;p&gt;A2A is used when the target agent is hosted outside Copilot Studio. The configuration steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obtain the target agent’s A2A endpoint URL and authentication requirements from whoever owns it.&lt;/li&gt;
&lt;li&gt;In the calling agent, open the &lt;strong&gt;Agents&lt;/strong&gt; page.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add an agent → Connect to an external agent → Agent2Agent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide the endpoint URL (the communication endpoint, not the agent-card URL) and a description that tells the orchestrator when to use this agent.&lt;/li&gt;
&lt;li&gt;Configure authentication — None, API key, or OAuth 2.0 (with Entra ID the sensible choice for enterprise scenarios).&lt;/li&gt;
&lt;li&gt;Create the connection and save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once registered, the A2A agent appears in the Agents list alongside connected and child agents. The orchestrator invokes all three through the same delegation mechanism at runtime; only the configuration differs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contracts between agents
&lt;/h3&gt;

&lt;p&gt;Whichever mechanism you use, the contract between the calling and called agent is where production reliability is won or lost.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input contract.&lt;/strong&gt; Pass only what the child needs, and only structured values where possible. Passing the entire conversation history “in case it helps” reliably produces slower, less predictable calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output contract.&lt;/strong&gt; Structured returns — typed records or JSON — are dramatically easier to compose than prose. Copilot Studio supports structured outputs from connected agents natively; define them explicitly rather than relying on the orchestrator to parse text. (Be aware that citations are not always preserved when outputs pass back to the caller.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error contract.&lt;/strong&gt; Decide in advance what the called agent returns when it cannot complete the task. A common convention: return &lt;code&gt;{status: "not_found"}&lt;/code&gt;, &lt;code&gt;{status: "unauthorized"}&lt;/code&gt;, or &lt;code&gt;{status: "error", message: "..."}&lt;/code&gt; rather than conversational refusals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency.&lt;/strong&gt; Any called agent that writes data should accept an idempotency key from the caller. Retries, which happen under load more often than teams expect, must not create duplicate tickets, emails, calendar events, or database rows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Avoiding loops
&lt;/h3&gt;

&lt;p&gt;Because Copilot Studio allows any agent to call any other agent, circular delegation is structurally possible: Agent A calls Agent B, which calls Agent A. The orchestrator will happily execute this until timeout or token exhaustion.&lt;/p&gt;

&lt;p&gt;The architectural rule: &lt;strong&gt;child agents do not call back into their parents.&lt;/strong&gt; If the specialist needs something the parent has, design the parent to pass it down as an input. If the specialist truly needs to coordinate with the parent, the design is not yet right — usually the work belongs in the parent, or the responsibility split is incorrect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Governance: who owns which connection
&lt;/h3&gt;

&lt;p&gt;When the graph of agents grows beyond a handful, ownership matters. The Power Platform Admin Center’s &lt;strong&gt;Copilot Hub&lt;/strong&gt; gives admins usage, cost, and governance insight for Copilot Studio agents; the &lt;strong&gt;agent inventory&lt;/strong&gt; — now exposed as a schema you can query from the admin center, API, or Azure Resource Graph &lt;em&gt;(preview)&lt;/em&gt; — lists every agent and the features it uses. At the tenant level, &lt;strong&gt;Microsoft Agent 365&lt;/strong&gt; (early access, Ignite 2025) and the &lt;strong&gt;Microsoft Entra agent registry&lt;/strong&gt; provide cross-platform agent identity and observability.&lt;/p&gt;

&lt;p&gt;Practical governance steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign a primary owner to every agent. Ownership is a Dataverse attribute; it also answers the question “who gets paged when this breaks.”&lt;/li&gt;
&lt;li&gt;Use Entra Agent ID (introduced May 2025; expanded to public preview at Ignite 2025) to give each agent a first-class identity. Scoped permissions then apply per agent rather than per maker — and per-agent identities can now be auto-created in Copilot Studio &lt;em&gt;(preview)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Treat A2A connections to external agents as supply-chain dependencies. Document who operates them, review their security posture, and log calls through Purview.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. What the combination of MCP and A2A enables
&lt;/h2&gt;

&lt;p&gt;With MCP for tools and A2A for agents, a Copilot Studio tenant becomes a composition layer rather than a monolith. An orchestrator can call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its own child agents for low-complexity sub-routines inside the parent.&lt;/li&gt;
&lt;li&gt;Copilot Studio connected agents for specialists owned inside the tenant.&lt;/li&gt;
&lt;li&gt;MCP servers for shared tool catalogs owned by backend teams.&lt;/li&gt;
&lt;li&gt;A2A agents for specialists built in code or hosted on other platforms (with Microsoft Foundry, Fabric, and M365 Agents SDK connections in public preview).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four mechanisms are available today, documented on Microsoft Learn, and — where generally available — in production use; the preview connections are usable now with the usual preview caveats.&lt;/p&gt;

&lt;p&gt;This is the meaningful change MCP and A2A introduce: integration work moves from being duplicated per agent to being centralized per domain (for tools) and per agent (for cross-platform agents). The remaining decisions — what the specialists are, who owns them, how they are described, what contracts they expose — become the visible bottleneck again. That is a healthy state, because those decisions are the ones that actually determine whether a multi-agent system works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;If you take five things away from this article, they are these.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;multi-agent orchestration is an architectural response to scope drift, not a fashion&lt;/strong&gt;. Splitting an agent is a decision with cost. Make it when you see the documented signals — tool counts approaching 30 to 40, multiple owners, conflicting knowledge, divergent SLAs — and avoid it when the cheaper fix (tighter instructions, scoped knowledge, a Power Automate flow) would do.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;the five surfaces are not interchangeable&lt;/strong&gt;. Instructions hold judgment (within an 8,000-character limit). Knowledge holds retrievable text. Tools hold actions. Topics hold reproducible flows. Triggers hold the answer to “when does this agent run.” Putting behavior on the wrong surface — large rule tables in instructions, deterministic compliance flows in generative nodes — is the most common cause of unreliable agents.&lt;/p&gt;

&lt;p&gt;Third, &lt;strong&gt;the four patterns cover the work&lt;/strong&gt;. Router-worker, sequential pipeline, parallel fan-out, hierarchical. Most production systems mix two or three. None of them require features that do not exist in Copilot Studio today.&lt;/p&gt;

&lt;p&gt;Fourth, &lt;strong&gt;MCP and A2A are the two open standards that keep the system composable&lt;/strong&gt;. MCP centralizes tool integration per domain. A2A makes cross-platform agent calls portable. Neither is a replacement for the other, and neither is a security model on its own. Both expand the trust boundary; treat them accordingly.&lt;/p&gt;

&lt;p&gt;Fifth, &lt;strong&gt;the configuration paths are not interchangeable either&lt;/strong&gt;. MCP servers are added on the Tools page via the MCP wizard. Child agents are created on the Agents page inside the parent. Connected agents and A2A agents are also added on the Agents page — connected agents from the available agents in the environment, A2A agents via &lt;em&gt;Add an agent → Connect to an external agent → Agent2Agent&lt;/em&gt;. Getting the path right is mechanical, but it is also where teams lose hours when they assume the wrong starting point in the UI.&lt;/p&gt;

&lt;p&gt;Part 2 picks up from here and works through the practical side: four end-to-end scenarios — IT incident triage, contract review, field service dispatch, employee onboarding — each on a different orchestration pattern, followed by a starter MCP server inventory and the ten anti-patterns that recur in production deployments. Read Part 1 to settle the architectural decisions; read Part 2 to see them executed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/multi-agent-patterns" rel="noopener noreferrer"&gt;Explore multi-agent orchestration patterns&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-add-other-agents" rel="noopener noreferrer"&gt;Add other agents (overview)&lt;/a&gt; — source of the documented 30–40 choices-of-action threshold, child-agent definition, and preview status of Foundry/Fabric/M365 Agents SDK connections&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/requirements-quotas" rel="noopener noreferrer"&gt;Quotas and limits&lt;/a&gt; — 8,000-character instruction limit&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/connectors/connector-reference/" rel="noopener noreferrer"&gt;Power Platform connectors reference&lt;/a&gt; — the 1,000+ connector catalog&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-add-existing-server-to-agent" rel="noopener noreferrer"&gt;Connect your agent to an existing Model Context Protocol (MCP) server&lt;/a&gt; — wizard path, Streamable transport, SSE no longer supported after August 2025, BYO MCP via Agents 365&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent" rel="noopener noreferrer"&gt;Connect an agent available over the Agent2Agent (A2A) protocol&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/whats-new" rel="noopener noreferrer"&gt;What’s new in Copilot Studio&lt;/a&gt; — A2A GA (April 2026), Computer Use GA (May 2026), per-agent Entra identities (preview), agent inventory schema (preview)&lt;/li&gt;
&lt;li&gt;Microsoft Copilot Studio blog — &lt;a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/copilot-studio/whats-new-in-copilot-studio-march-2025/" rel="noopener noreferrer"&gt;What’s new in Copilot Studio: March 2025&lt;/a&gt; — autonomous agents and generative orchestration GA&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-triggers-about" rel="noopener noreferrer"&gt;Event trigger overview&lt;/a&gt; — documented event triggers&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/adoption-case-studies" rel="noopener noreferrer"&gt;Copilot Studio real-world transformation stories&lt;/a&gt; — ABN AMRO, Rabobank, Dunaway, Nexi Group, City of Montréal, Singapore Civil Defence Force, T-Mobile, Holland America Line, La Trobe University, Signetic, A1 Inteligência em Viagens&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/entra/fundamentals/whats-new-ignite-2025" rel="noopener noreferrer"&gt;What’s new at Ignite 2025 for Microsoft Entra&lt;/a&gt; — Entra Agent ID&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/power-platform/admin/copilot/copilot-hub" rel="noopener noreferrer"&gt;Copilot Hub in the Power Platform Admin Center&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;a href="https://learn.microsoft.com/en-us/microsoft-365/copilot/copilot-control-system/overview" rel="noopener noreferrer"&gt;Copilot Control System overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft CopilotStudioSamples — &lt;a href="https://microsoft.github.io/mcscatblog/posts/dynamic-mcp-routing-copilot-studio/" rel="noopener noreferrer"&gt;Dynamic MCP Routing in Copilot Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model Context Protocol — &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Official specification and SDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Agent2Agent protocol — &lt;a href="https://a2aproject.github.io/A2A/" rel="noopener noreferrer"&gt;Open specification&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;VentureBeat — &lt;a href="https://venturebeat.com/security/microsoft-salesforce-copilot-agentforce-prompt-injection-cve-agent-remediation-playbook" rel="noopener noreferrer"&gt;Microsoft patched a Copilot Studio prompt injection. The data exfiltrated anyway.&lt;/a&gt; — CVE-2026-21520 coverage, April 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>copilotstudio</category>
      <category>multiagentorchestration</category>
    </item>
    <item>
      <title>Teams Phone Agent and Custom Voice Agents in Copilot Studio</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 27 Jun 2026 05:58:35 +0000</pubDate>
      <link>https://dev.to/holgerimbery/teams-phone-agent-and-custom-voice-agents-in-copilot-studio-19gc</link>
      <guid>https://dev.to/holgerimbery/teams-phone-agent-and-custom-voice-agents-in-copilot-studio-19gc</guid>
      <description>&lt;p&gt;How Teams Phone Agent's out-of-the-box voice experience and custom Copilot Studio voice agents bring conversational AI to Microsoft Teams Phone — capabilities, call-flow design, setup, gating, and consumption billing in the Frontier preview.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede:&lt;/strong&gt;&lt;br&gt;
Microsoft Teams Phone now has a conversational AI front door. &lt;strong&gt;Teams Phone Agent&lt;/strong&gt; is a new, configurable out-of-the-box experience that greets callers in natural language and resolves common requests — questions and answers, appointment scheduling, and conversational routing across 60+ languages — without any custom code. When a request is specific to your business, a &lt;strong&gt;custom voice agent built in Microsoft Copilot Studio&lt;/strong&gt; takes over, either through a seamless hand-off or by direct dial to a phone number. Both capabilities arrived through Microsoft's &lt;strong&gt;Frontier program&lt;/strong&gt; in June 2026, are tenant-gated, and the custom-agent path is billed by consumption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why read this article&lt;/strong&gt;&lt;br&gt;
Teams Phone has always routed calls with auto attendants and call queues. What changed is that the routing layer can now &lt;em&gt;understand spoken intent&lt;/em&gt; and &lt;em&gt;act on it&lt;/em&gt; — answering questions from a knowledge base, booking an appointment, or completing a business-specific workflow such as a prescription refill or an outage report. This is not a forced change for every Teams user. It is a deliberate capability for Teams Phone administrators, contact-center-style teams, Copilot Studio makers, and finance and compliance stakeholders who need to review, preview, gate, bill, route calls, manage data sources, and define fallback paths before AI ever answers a live customer call. This guide ties those decisions to the configuration steps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three things define the current state of this feature set:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Two layers, one call flow.&lt;/strong&gt; Teams Phone Agent provides built-in skills you &lt;em&gt;configure&lt;/em&gt; (Q&amp;amp;A, Appointments, conversational routing). Copilot Studio voice agents provide custom workflows you &lt;em&gt;build&lt;/em&gt;. They are designed to work together inside a single call flow.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontier Public Preview, tenant-gated.&lt;/strong&gt; Both capabilities entered Frontier Public Preview in mid-June 2026. The Copilot Studio integration is explicitly gated — Microsoft support must enable your tenant before the Teams Phone channel option appears.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ynxcmjkrdaz84ifpqjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ynxcmjkrdaz84ifpqjr.png" alt="upgit_20260626_1782454466.png" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consumption billing for custom agents.&lt;/strong&gt; Copilot Studio voice agent experiences are billed consumptively at a rate based on the orchestration type selected when the agent is built. Billing rolls out by early July 2026; no usage will be charged before then.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Confidence and currency note.&lt;/strong&gt; This article describes a &lt;strong&gt;preview&lt;/strong&gt; feature set as documented in June 2026. Preview features are not intended for production use, may have restricted functionality, and are subject to change. Capabilities, gating, regional support, and especially &lt;strong&gt;pricing and service limits&lt;/strong&gt; will change at general availability. Re-verify every commercial and technical detail against the current Microsoft Learn documentation and the Teams admin center before committing to a rollout.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope.&lt;/strong&gt; This article covers Teams Phone Agent's built-in skills, custom Copilot Studio voice agents (hand-off and direct-dial patterns), the supporting auto-attendant/call-queue model, setup in the Teams admin center and Copilot Studio, preview gating, and consumption billing. Detailed Power Platform / Copilot Studio licensing economics, contact-center seat licensing, and third-party agent SDKs are out of scope and referenced only where they intersect with setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Where this fits — use cases, and why it doesn't cannibalize Dynamics 365 Contact Center
&lt;/h2&gt;

&lt;p&gt;Possible use cases. Teams Phone Agent and Copilot Studio voice agents are aimed at organizations whose phone system is Teams Phone, and that want to add conversational self-service to their existing call flows. The natural fits are front-door deflection and after-hours coverage: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clinic answering hours, location, and insurance questions and handling appointment reschedules; &lt;/li&gt;
&lt;li&gt;a bank branch understanding intent and routing a mortgage caller to the right team with context; &lt;/li&gt;
&lt;li&gt;a pharmacy taking prescription-refill and order-status requests; &lt;/li&gt;
&lt;li&gt;a utility letting customers report an outage or get billing help at 2 a.m.; &lt;/li&gt;
&lt;li&gt;a home-services firm confirming or moving a booking without staff. 
Inside larger enterprises that already have Teams Phone, the same pattern serves internal lines:&lt;/li&gt;
&lt;li&gt;IT helpdesk, HR, facilities — and acts as an overflow or out-of-hours tier in front of human queues that would otherwise drop to voicemail. 
The common thread is high-volume, repetitive, rules- or knowledge-driven calls that don't require a trained agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this isn't cannibalizing Dynamics 365 Contact Center.
&lt;/h2&gt;

&lt;p&gt;The two products serve different operating models, and Microsoft has deliberately built them as a continuum rather than competitors. &lt;strong&gt;Teams Phone Agent&lt;/strong&gt; is an extension of the &lt;strong&gt;telephony layer&lt;/strong&gt; — it modernizes auto attendants and call queues for businesses that don't run, and don't want to run, a dedicated contact center. &lt;strong&gt;Dynamics 365 Contact Center&lt;/strong&gt; is a &lt;strong&gt;full CCaaS platform&lt;/strong&gt;: unified omnichannel routing across voice, chat, email, and social; a managed agent desktop with Copilot assist; queue and workforce management; quality and compliance tooling; CRM-agnostic system-of-record integration; and the operational analytics a supervised contact-center team depends on. Teams Phone Agent delivers none of those agent-operations capabilities, and it isn't trying to — so it can't displace the customers who need them. Crucially, both rest on the same Copilot Studio agent foundation: the custom voice agents you attach to Teams Phone are built in Copilot Studio, and the AI agents inside Dynamics 365 Contact Center draw on that same agentic platform and consumption model. That shared base means an organization grows along the curve — start with a Teams Phone Agent front door, and when call volume, omnichannel scope, or staffed-agent operations outgrow it, step up to Contact Center without abandoning the agent investment. The commercial models reinforce the split: Teams Phone Agent is a consumption-billed add-on to existing Teams Phone, while Contact Center is a per-seat CCaaS subscription. Different problem, different buyer, different price shape — complementary tiers of one Microsoft voice-AI story, not overlapping bets.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What changed and why it matters
&lt;/h2&gt;

&lt;p&gt;It is often difficult for businesses to serve every customer immediately during surges in call volume. Callers sit on hold while staff work through the backlog. Meanwhile, agentic voice AI is opening new ways to serve customers — answering questions, scheduling appointments, or even completing transactions over the phone, including after hours and on weekends.&lt;/p&gt;

&lt;p&gt;Teams Phone Agent and the ability to bring custom Copilot Studio voice agents to Teams Phone address this directly. For customer-facing organizations using Teams Phone — healthcare clinics, bank branches, utilities, pharmacies, service businesses — these agents take repetitive calls off employees' plates, so people can focus on the conversations that genuinely need a human touch, and customers reach resolution faster.&lt;/p&gt;

&lt;p&gt;The goal is &lt;strong&gt;not&lt;/strong&gt; to remove humans from every call. It is to reduce repetitive call handling so staff can focus on complex or sensitive conversations. Instead of relying solely on traditional auto-attendants, keypad menus, and human staff, organizations can now offer conversational phone experiences that understand spoken requests and respond naturally.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The design principle that matters most.&lt;/strong&gt; Teams Phone Agent sits &lt;em&gt;inside&lt;/em&gt; your call flow. It should be designed as a business process — greeting, knowledge sources, routing rules, escalation, after-hours behavior — rather than switched on as a generic AI receptionist. Every flow needs a deliberate happy path, escalation path, and after-hours path.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. The out-of-the-box experience — Teams Phone Agent
&lt;/h2&gt;

&lt;p&gt;Teams Phone Agent greets callers and resolves common requests using a set of &lt;strong&gt;built-in skills you configure rather than build&lt;/strong&gt;. This is the new, preview, out-of-the-box layer: administrators enable it in the Teams admin center and point it at content and routing targets. Four capabilities ship in the box.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Example use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Questions &amp;amp; Answers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Answers caller questions from configured knowledge bases that support &lt;strong&gt;file uploads and URLs&lt;/strong&gt;, in natural conversation.&lt;/td&gt;
&lt;td&gt;A clinic answers questions about hours, locations, accepted insurance, and appointment preparation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Appointment scheduling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lets callers &lt;strong&gt;book, reschedule, or cancel&lt;/strong&gt; appointments and &lt;strong&gt;look up upcoming appointment details&lt;/strong&gt;.&lt;/td&gt;
&lt;td&gt;A home-services company lets a customer change a plumbing or electrical repair booking without waiting for staff.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conversational routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The same tried-and-tested routing as traditional auto attendants — &lt;strong&gt;user or extension lookup, transfer to a user or call queue, and more&lt;/strong&gt; — driven by what the caller &lt;em&gt;says&lt;/em&gt;.&lt;/td&gt;
&lt;td&gt;A bank caller asking about a mortgage application is understood and sent to the right team.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context-aware transfer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When a human is needed, the caller is passed along &lt;strong&gt;with the full conversation context&lt;/strong&gt;.&lt;/td&gt;
&lt;td&gt;The customer does not have to repeat the entire issue after the transfer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supports conversations across &lt;strong&gt;60+ languages&lt;/strong&gt;, so callers interact naturally in their preferred language.&lt;/td&gt;
&lt;td&gt;A branch or service desk supports callers in multiple languages at scale.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The decisive practical point: callers skip cumbersome phone menus and do not have to repeat themselves, while the organization keeps the proven routing model underneath.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Real-world example — replacing a keypad menu
&lt;/h3&gt;

&lt;p&gt;A regional clinic's old line opens with "Press 1 for appointments, press 2 for billing, press 3 for hours and location…". Most calls are about hours, directions, and appointment changes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Before:&lt;/strong&gt; every caller navigates the menu; appointment changes route to a front-desk queue that is busy at peak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After (Teams Phone Agent):&lt;/strong&gt; the agent answers hours and directions instantly from a knowledge base (uploaded files + the clinic website URL), handles reschedules and cancellations directly, and only conversationally transfers genuine billing questions to staff — with context attached.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; if a question is answered from published content or a task is a structured booking change, it belongs in the built-in skills. If it requires a system of record (billing balances, prescription records), it belongs in a custom Copilot Studio agent — see §3.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The custom layer — Copilot Studio voice agents
&lt;/h2&gt;

&lt;p&gt;The built-in Q&amp;amp;A and appointment tools cover common ground. When you need to automate processes unique to your business — letting a patient fill a prescription over the phone, a customer pay or query a bill, or a caller check order status — &lt;strong&gt;custom voice agents built in Microsoft Copilot Studio&lt;/strong&gt; step in. This functionality is beyond what the built-in Appointments and Q&amp;amp;A tools provide.&lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;two ways&lt;/strong&gt; to bring a Copilot Studio voice agent into Teams Phone.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;When to use it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hand-off&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Teams Phone Agent handles greeting and routine requests, then seamlessly hands the call to a custom Copilot Studio agent when a specialized skill is needed. You want a single conversational front door that escalates to specialized workflows.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Direct dial&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Copilot Studio voice agent is attached directly to a phone number via a Teams Phone &lt;strong&gt;resource account&lt;/strong&gt;, so callers reach it as the first point of contact.&lt;/td&gt;
&lt;td&gt;You are upgrading an existing IVR or want a dedicated line for a specific workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.1 What you can build
&lt;/h3&gt;

&lt;p&gt;Copilot Studio is a platform for building custom workflows tailored to your business:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom workflows&lt;/strong&gt; — specialized voice topics and conversational logic (billing, refills, order/inventory status, and more).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible integrations&lt;/strong&gt; — connect the agent to CRM systems, internal knowledge bases, and other line-of-business systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing via Tags&lt;/strong&gt; — pass dynamic transfer information from Teams to Copilot Studio so the agent can route to call queues, auto attendants, specific users, and more, &lt;strong&gt;without hardcoding values&lt;/strong&gt;. Tags are what let one agent scale across many departments and transfer targets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By front-ending a call flow with a Copilot Studio voice agent, the agent acts as an intelligent first point of contact, resolving issues independently before routing to a human using traditional Teams Phone routing if needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Supported agent types and one-way settings.&lt;/strong&gt; Only &lt;strong&gt;basic&lt;/strong&gt; voice agents are supported on this channel — &lt;strong&gt;real-time voice agents are not supported&lt;/strong&gt;. Changing an agent's voice type is an &lt;strong&gt;irreversible&lt;/strong&gt; action. Under &lt;strong&gt;Settings → Generative AI → Orchestration&lt;/strong&gt;, select &lt;strong&gt;classic orchestration&lt;/strong&gt;; &lt;strong&gt;generative orchestration is not supported here&lt;/strong&gt; and can introduce heavy latency (reported 5–6 second delays) and unexpected charges.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3.2 Real-world examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pharmacy.&lt;/strong&gt; A custom voice agent lets customers request a prescription refill by phone and check order status — a simpler way to manage routine needs without waiting for staff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utility provider.&lt;/strong&gt; A custom agent connected to Teams Phone lets customers report an outage or get billing help &lt;strong&gt;outside normal business hours&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. The foundation — auto attendants, call queues, and "Agents and Queues"
&lt;/h2&gt;

&lt;p&gt;None of this replaces the planning discipline Teams Phone already requires. Teams Phone Agent, auto attendants, and call queues are planned and licensed together as one family, and the classic building blocks still apply.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto attendants&lt;/strong&gt; redirect calls immediately or by dial option, allow dial-by-name or extension, route to voicemail / external numbers / other voice apps, and handle off-hours and holiday routing separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call queues&lt;/strong&gt; hold callers until an agent is free and redirect on overflow, timeout, or agent availability — to other queues, attendants, voicemail, or external destinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams Phone Agent adds a conversational layer on top of and alongside these. Custom Copilot Studio agents that are published to the Teams Phone channel &lt;strong&gt;automatically appear in the Agents and Queues list&lt;/strong&gt; in the Teams admin center, ready to be wired into a call flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Business decisions to settle first
&lt;/h3&gt;

&lt;p&gt;Microsoft's planning guidance asks you to document the same business decisions up front, now extended for AI voice. Capture the answers and hand them to whoever does the configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How do callers reach you?&lt;/strong&gt; Internal only, external, or click-to-call on the web?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which languages&lt;/strong&gt; are needed, and for which department or group?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice or dial input&lt;/strong&gt; — Do you allow spoken input, or keypad only?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Off-hours and holiday routing&lt;/strong&gt; — what are the hours and holidays?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge sources&lt;/strong&gt; — which files and URLs feed the Q&amp;amp;A tool?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback and escalation&lt;/strong&gt; — where does an unresolved call go, and does the human handoff carry context?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt; — are there call-recording or other regulatory requirements?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authorized users.&lt;/strong&gt; Day-to-day operational changes — business, after-hours, and holiday greetings; call routing; queue membership; reporting — can be delegated to &lt;strong&gt;authorized users&lt;/strong&gt; who do not need Teams admin center access or a Teams Administrator role, with no extra licensing required.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5. Setup at a glance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Built-in Teams Phone Agent
&lt;/h3&gt;

&lt;p&gt;Teams Phone admins configure Teams Phone Agent in the &lt;strong&gt;Teams admin center&lt;/strong&gt; under &lt;strong&gt;Voice → Templates &amp;amp; resources → Agents and Queues&lt;/strong&gt;, setting up the Q&amp;amp;A and Appointments tools, conversational routing, holidays, and greetings. Standard Teams Phone prerequisites apply, including a properly configured Teams Phone &lt;strong&gt;resource account&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Custom Copilot Studio agent — hand-off pattern
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the voice agent&lt;/strong&gt; in Copilot Studio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settings → Generative AI → Orchestration → Classic orchestration&lt;/strong&gt; (generative is not supported here).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settings → Security → Authentication → No authentication&lt;/strong&gt; (required so callers can reach the agent), then &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channels → Teams Phone Agent → Add channel&lt;/strong&gt;, wait for confirmation, then &lt;strong&gt;Publish&lt;/strong&gt;. &lt;em&gt;(If the channel option is not visible, your environment is not enabled — see §6.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Teams admin center&lt;/strong&gt;, open your Teams Phone Agent call flow, &lt;strong&gt;Assign a dial key → destination: Agents and Queues&lt;/strong&gt;, enter a voice command and description, optionally link a &lt;strong&gt;Tag template&lt;/strong&gt;, and select your published agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call in to confirm&lt;/strong&gt; the hand-off works.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.3 Custom Copilot Studio agent — direct-dial pattern
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Teams admin center → Voice → Resource accounts → Add.&lt;/strong&gt; Create a resource account with type &lt;strong&gt;AI Agent&lt;/strong&gt;, with a display name, username, and domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License the resource account.&lt;/strong&gt; In the Microsoft 365 admin center, assign the &lt;strong&gt;Teams Phone Resource Account&lt;/strong&gt; license to that account and let the change propagate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link the agent.&lt;/strong&gt; Back in &lt;strong&gt;Resource accounts → Edit&lt;/strong&gt;, set the &lt;strong&gt;Agent Source&lt;/strong&gt; to your Copilot Studio voice agent. Optionally set a &lt;strong&gt;voice routing policy&lt;/strong&gt; and assign a &lt;strong&gt;phone number&lt;/strong&gt; (Calling Plans, Operator Connect, or Direct Routing). Optionally attach a &lt;strong&gt;Tag template&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;PowerShell cmdlets are available for scripted setup.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;No phone number?&lt;/strong&gt; If you do not assign a phone number to the resource account, only users in your tenant can reach the agent over VoIP via the Teams client.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5.4 Using Tags for Transfers
&lt;/h3&gt;

&lt;p&gt;After attaching a tag template in the Teams admin center, configure the Copilot Studio agent to act on the tag values: add a topic with a "User says a phrase" trigger (for example, "transfer" or "escalate"), ask the caller to choose a department using the tag names as options, then use &lt;strong&gt;Topic Management → Transfer conversation → Transfer to agent&lt;/strong&gt;, passing the caller's choice as the transfer target. Publish the agent again. The agent can now transfer to the targets defined in your tag template.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Environment and regional constraints (Copilot Studio).&lt;/strong&gt; Create the Copilot Studio environment in a &lt;strong&gt;supported region&lt;/strong&gt; (for example, US, UK, Europe, Canada, Australia, Asia, Korea, Norway, Sweden, Switzerland, UAE). Voice agents are not supported in environments in France, Germany, India, Japan, or South Africa — though tenants based in those countries can still use voice agents hosted in a supported region. The Power Platform environment must have &lt;strong&gt;"Get new features early" = No&lt;/strong&gt; and &lt;strong&gt;"Add a Dataverse data store" = Yes&lt;/strong&gt;. Choose the region closest to your callers to minimize latency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. Availability, gating, and licensing
&lt;/h2&gt;

&lt;p&gt;This is firmly a preview, and the access and commercial model matter before any pilot.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Current state (June 2026)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frontier Public Preview. Both Teams Phone Agent and the Copilot Studio integration entered Frontier Public Preview in mid-June 2026.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gating&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Copilot Studio ↔ Teams Phone integration is &lt;strong&gt;explicitly enabled per tenant&lt;/strong&gt;. Contact &lt;strong&gt;Microsoft support&lt;/strong&gt; to enable it; until then, the Teams Phone channel option does not appear in Copilot Studio.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Teams Phone prerequisites&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard Teams Phone prerequisites, including a properly configured resource account and the relevant Teams Phone licenses for your scenario.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Copilot Studio licenses&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A &lt;strong&gt;Copilot Studio tenant license&lt;/strong&gt; (to run and publish agents) and a &lt;strong&gt;Copilot Studio user license&lt;/strong&gt; (to build them).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built-in Teams Phone Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Available via the Frontier program; service limitations may apply.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.1 How custom agents are billed
&lt;/h3&gt;

&lt;p&gt;Custom Copilot Studio voice agent experiences — whether reached through a Teams Phone Agent handoff or by direct dial — are &lt;strong&gt;billed consumptively&lt;/strong&gt;, at a rate based on the &lt;strong&gt;orchestration type&lt;/strong&gt; your organization selects when building the agent in Copilot Studio.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Billing timeline.&lt;/strong&gt; Billing for Copilot Studio voice agent experiences in Teams Phone was set to roll out &lt;strong&gt;by early July 2026&lt;/strong&gt;, and usage is &lt;strong&gt;not charged before&lt;/strong&gt; that rollout. When billing goes live, &lt;strong&gt;all Frontier preview users must set up billing&lt;/strong&gt; to keep using Copilot Studio voice agents for Teams Phone. All licensing, pricing, and service limits are subject to change, with more details expected at general availability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6.2 Cost-control practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;classic orchestration&lt;/strong&gt; to avoid unexpected charges and reduce latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope each agent narrowly&lt;/strong&gt; to the processes it supports — overly broad agents produce unexpected responses and unpredictable costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test thoroughly&lt;/strong&gt; with proper guardrails before exposing an agent to callers; how you build the agent significantly shapes the customer experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. An expanding ecosystem
&lt;/h2&gt;

&lt;p&gt;Microsoft is positioning this as a platform with &lt;strong&gt;choice across first- and third-party voice agents&lt;/strong&gt;. Alongside first-party Teams Phone Agent and Copilot Studio agents, Microsoft is working with select solution developers to integrate their voice agents with Teams Phone. &lt;strong&gt;AudioCodes announced general availability of its voice agent for Teams Phone&lt;/strong&gt; at launch, with additional solutions expected. Organizations can mix the built-in experience, custom Copilot Studio agents, and certified third-party agents within the same Teams Phone call flows.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Real-world example — a phased pilot
&lt;/h2&gt;

&lt;p&gt;A 40-branch bank wants to reduce hold times on its retail support line without risking a poor first AI experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Phase 1 — out-of-the-box only.&lt;/strong&gt; Enable Teams Phone Agent on a single non-critical line. Configure Q&amp;amp;A from published FAQs (hours, locations, card-replacement steps) and conversational routing to existing queues, with context-aware transfer to a human for anything unresolved. No custom build, no consumption billing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phase 2 — one custom workflow.&lt;/strong&gt; Once the front door is proven, build a single, narrowly scoped Copilot Studio agent for one high-volume task (for example, "report a lost card") integrated to the system of record, using classic orchestration. Validate the cost against the consumption meter before widening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phase 3 — scale and route.&lt;/strong&gt; Use Tags so one agent serves multiple departments, and add after-hours coverage where a human queue previously sent callers to voicemail.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why this order:&lt;/strong&gt; It separates the zero-cost, no-code value (Phase 1) from the consumption-billed custom value (Phase 2+), so the organization can prove customer experience and measure cost before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Conclusion
&lt;/h2&gt;

&lt;p&gt;Teams Phone Agent turns Teams Phone from a routing-and-queueing system into a &lt;strong&gt;conversational AI front door&lt;/strong&gt;. The out-of-the-box experience — Q&amp;amp;A, appointment scheduling, conversational routing, context-aware handoff, and 60+ languages — covers routine calls with no code. Custom Copilot Studio voice agents extend it to the workflows unique to your business, accessible via handoff or direct dial. Underneath, the classic auto attendant and call queue model keeps escalation and after-hours paths intact.&lt;/p&gt;

&lt;p&gt;For now, this is a &lt;strong&gt;gated Frontier preview&lt;/strong&gt; with &lt;strong&gt;consumption-based billing&lt;/strong&gt; for custom agents. The disciplined move is a &lt;strong&gt;scoped pilot&lt;/strong&gt;: pick one high-volume, low-risk flow; deliberately design the happy, escalation, and after-hours paths; confirm the human handoff carries context; and validate cost with classic orchestration before widening. The technology is ready to trial — the discipline is in treating every voice agent as a designed business process, not a switch you flip.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article will be revised as the feature set moves toward general availability. Expect changes to gating, regional support, supported agent types, and especially pricing and service limits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Glossary - for those new to Teams Phone and Copilot Studio
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Expansion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Agent (resource account type)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Teams Phone resource account type used to attach a Copilot Studio voice agent directly to a phone number for direct dial.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto Attendant (AA)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Teams Phone voice application that greets callers and routes them by menu, dial-by-name, or extension, with separate off-hours and holiday handling.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Call Queue (CQ)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Teams Phone voice application that holds callers until an agent is available and redirects on overflow, timeout, or agent availability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Classic orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Copilot Studio orchestration mode required for the Teams Phone channel; uses deterministic topic flows. Generative orchestration is not supported here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Direct dial&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pattern where a Copilot Studio voice agent is attached directly to a phone number via a resource account, acting as the first point of contact.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontier program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Microsoft's early-access program through which Teams Phone Agent and the Copilot Studio integration are currently delivered.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Handoff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pattern where Teams Phone Agent passes a call to a custom Copilot Studio voice agent for a specialized workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IVR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interactive Voice Response — the automated voice menu or bot at the start of a call.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Microsoft Copilot Studio — the platform for building custom voice and chat agents.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource account&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A licensed, non-user account in Teams Phone to which voice applications (auto attendants, call queues, voice agents) and phone numbers are assigned.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tags&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A mechanism to pass dynamic transfer information from Teams to a Copilot Studio agent, identifying next steps and transfer targets without hardcoding values.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Teams Phone Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The configurable, out-of-the-box conversational AI experience for Teams Phone, providing built-in Q&amp;amp;A, appointment, and routing skills.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Sources and Links (primary)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/microsoftteamsblog/engage-customers-with-teams-phone-agent-and-custom-voice-agents-built-in-copilot/4526829" rel="noopener noreferrer"&gt;Engage customers with Teams Phone Agent and custom voice agents built in Copilot Studio — Microsoft Teams Blog (June 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-plan-overview" rel="noopener noreferrer"&gt;Plan — Auto attendants and Call queues overview (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-plan-teams-phone-agent-agents-queues" rel="noopener noreferrer"&gt;Plan — Agents and Queues for Teams Phone Agent (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-plan-business-decisions" rel="noopener noreferrer"&gt;Plan — Business decisions for Teams Phone Agent, Auto Attendant, and Call Queue (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-direct-mcs" rel="noopener noreferrer"&gt;Setup — Direct dial Microsoft Copilot Studio voice agents through Microsoft Teams Phone (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-setup-teams-phone-agent-agents-queues" rel="noopener noreferrer"&gt;Setup — Teams Phone Agent — Agents and Queues (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/voice-teams-phone-agent" rel="noopener noreferrer"&gt;Integrate voice agents with Teams Phone Agent (preview) — Microsoft Copilot Studio (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/microsoftteams/aa-cq-plan-authorized-users" rel="noopener noreferrer"&gt;Plan — Authorized users for Teams Phone Agent, Auto Attendant, and Call Queue (Microsoft Learn)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>msteams</category>
      <category>microsoft</category>
      <category>copilotstudio</category>
      <category>voicebots</category>
    </item>
    <item>
      <title>Power Platform Governance: A Practitioner's Reference (Part 2)</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/holgerimbery/power-platform-governance-a-practitioners-reference-part-2-13mk</link>
      <guid>https://dev.to/holgerimbery/power-platform-governance-a-practitioners-reference-part-2-13mk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede.&lt;/strong&gt; Part 2 of this two-article reference picks up where last week’s foundations ended. With the platform perimeter in place — environments, Managed Environments, environment groups, DLP, tenant isolation, identity, and monitoring — this article works through the resources that live inside that perimeter and the processes that move them through it: Copilot Studio agents, agent authentication and connector governance, Application Lifecycle Management and pipelines, solution checker and quality gates, licensing and capacity governance, and change management and release rings. A closing recap then ties both articles together into a single posture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who this is for.&lt;/strong&gt; Same audience as part 1 — Power Platform administrators, security and compliance officers, Center of Excellence leads, architects, and makers. Part 2 assumes you have read part 1 or have an equivalent grasp of environment design, Managed Environments, environment groups, and DLP. Where part 1 answered “what is the perimeter and how do we hold it?”, part 2 answers “what gets built inside it, and how does that work move from a maker’s hands into production safely?” The format is unchanged: each control begins with the reason it exists, moves to the how, and points you to the authoritative Microsoft Learn page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A note on the kits (continues from part 1).&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Two pieces of widely-deployed community tooling have changed status: the &lt;strong&gt;CoE Starter Kit&lt;/strong&gt; is no longer actively maintained — its core capabilities are now part of the Power Platform admin center (Inventory, Usage, Monitor, Actions) — and the &lt;strong&gt;ALM Accelerator for Power Platform&lt;/strong&gt; is formally deprecated, with &lt;strong&gt;Power Platform Pipelines&lt;/strong&gt; as the named replacement. Sections 9.14 (agent inventory) and 11 (ALM and pipelines) reflect that. The detailed write-up of the CoE Starter Kit transition lives in part 1, section 8.6; the ALM Accelerator transition is summarised in section 11.6 of this part.&lt;/p&gt;
&lt;h2&gt;
  
  
  Recap: where part 1 left off
&lt;/h2&gt;

&lt;p&gt;As we saw last week, platform-level governance is the foundation that everything else rests on. Part 1 walked through eight sections of foundations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment strategy.&lt;/strong&gt; Environments are the unit of governance because DLP, security roles, capacity, and compliance boundaries all follow environment lines. A topology that mirrors your delivery lifecycle (default for personal productivity, dev/test/prod for solutions, dedicated CoE and training environments) gives every later control a place to attach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The default environment.&lt;/strong&gt; It cannot be deleted, every licensed user is a maker in it, and Dataverse cannot be removed once added. Renaming it, attaching a restrictive DLP policy, enabling default environment routing, and converting it to a Managed Environment turn it from a shadow-IT magnet into a known, bounded surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed Environments.&lt;/strong&gt; A premium governance layer that adds sharing limits, the weekly digest, solution checker enforcement, maker welcome content, pipelines hosting, IP firewall, extended backup, and DLP for desktop flows. Most of part 2’s controls depend on Managed Environments being on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment groups and rules.&lt;/strong&gt; Groups apply policy in bulk to Managed Environments. When a rule is published at the group level, the corresponding setting becomes read-only inside each member environment, which is what makes policy enforceable rather than advisory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Loss Prevention.&lt;/strong&gt; Connectors are sorted into Business, Non-business, and Blocked. Data cannot flow between Business and Non-business in the same resource. Endpoint filtering and connector action control let you keep useful connectors while blocking their dangerous edges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tenant isolation and cross-tenant controls.&lt;/strong&gt; Restricts which external Entra ID tenants can be the identity source for connections. Defaults differ by tenant age — tenants created on or after 30 March 2026 ship with isolation enabled and both directions defaulting to deny.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security roles and identity.&lt;/strong&gt; Layered authorization: Entra ID at the tenant, Dataverse roles inside each environment, service principals for non-interactive work, Conditional Access and MFA on the &lt;code&gt;Power Platform API&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring, analytics, and tenant inventory.&lt;/strong&gt; Built-in admin center analytics (the &lt;strong&gt;Inventory&lt;/strong&gt; , &lt;strong&gt;Usage&lt;/strong&gt; , &lt;strong&gt;Monitor&lt;/strong&gt; , and &lt;strong&gt;Actions&lt;/strong&gt; experiences), the weekly digest, Microsoft Purview audit log, Application Insights export, and Microsoft Sentinel for SOC integration. The &lt;strong&gt;CoE Starter Kit&lt;/strong&gt; is no longer actively maintained; its inventory and attestation scenarios are now Microsoft’s responsibility in the admin center, reachable through the &lt;strong&gt;Power Platform inventory API&lt;/strong&gt; and the &lt;strong&gt;Power Platform for Admins V2&lt;/strong&gt; connector for any custom automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The minimum viable foundation from part 1 was: restrict default environment creation, attach a tenant-wide baseline DLP policy, enable default environment routing with a Managed Environments group, turn on tenant-level analytics, lean on the Power Platform admin center’s &lt;strong&gt;Inventory&lt;/strong&gt; , &lt;strong&gt;Usage&lt;/strong&gt; , &lt;strong&gt;Monitor&lt;/strong&gt; , and &lt;strong&gt;Actions&lt;/strong&gt; experiences (the CoE Starter Kit is no longer actively maintained), and verify your tenant isolation defaults. Everything in part 2 assumes that foundation is in place. The section numbering continues from part 1, starting at section 9.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Governing Microsoft Copilot Studio
&lt;/h2&gt;

&lt;p&gt;Copilot Studio agents are Power Platform resources. They are stored in environments, secured with Dataverse, shared through the same sharing model as apps and flows, and subject to DLP policies. A Copilot Studio agent is not a separate governance domain; it is a new resource type inside the platform perimeter. The controls below are specific to agents and combine with the platform-wide ones covered in part 1.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.1 Decide agent posture in tenant settings
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The most basic question — “should agents exist in this tenant at all, and where?” — is answered at the tenant level. Skipping this step makes every later control fight a current.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In &lt;strong&gt;Power Platform admin center &amp;gt; Settings &amp;gt; Tenant settings&lt;/strong&gt; , control whether Copilot Studio is enabled, who can create agents, whether agents can be created in the default environment, and which AI features (generative answers, autonomous triggers, external models) are available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/tenant-settings" rel="noopener noreferrer"&gt;Tenant settings reference&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.2 Use the Copilot Studio admin center for agent-specific controls
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Some agent controls live outside the Power Platform admin center because they are specific to Copilot Studio’s data model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Visit &lt;code&gt;admin.copilotstudio.microsoft.com&lt;/code&gt; to control sharing org-wide, tenant-wide data access settings for agents, and transcript retention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-admin-center" rel="noopener noreferrer"&gt;Copilot Studio admin center&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.3 Restrict who can share agents tenant-wide
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; “Share with my entire organization” is a one-click action that bypasses normal sharing limits. Without restriction, any maker can publish a tenant-wide agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; The recent tenant setting &lt;strong&gt;“Choose who has permission to share agents with your entire organization”&lt;/strong&gt; allows three modes: all users, no users, or specific groups. Restrict to a CoE or approvals group for production-grade sharing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-sharing-controls-limits" rel="noopener noreferrer"&gt;Control how agents are shared&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.4 Cap agent sharing per environment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Even with tenant-wide sharing locked down, intra-tenant oversharing is still possible. Sharing limits cap blast radius per agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In a Managed Environment, apply &lt;code&gt;Limit sharing&lt;/code&gt; to cap viewers per agent and disable sharing via security groups. Mechanics are in part 1, section 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-sharing-limits" rel="noopener noreferrer"&gt;Limit sharing&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.5 Apply group rules for agent sharing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Sharing limits per environment are tedious to manage at scale. Group rules let you apply the same sharing posture across many environments at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the &lt;code&gt;Sharing agents with Editor permissions&lt;/code&gt; and &lt;code&gt;Sharing agents with Viewer permissions&lt;/code&gt; environment group rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups-rules" rel="noopener noreferrer"&gt;Rules for environment groups&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.6 Set maker welcome content for Copilot Studio
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Most makers entering Copilot Studio will not have read your governance documentation. The welcome banner is the cheapest place to put guardrails in front of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Configure maker welcome content in Managed Environments to surface agent guidelines as makers enter Copilot Studio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-security-and-governance" rel="noopener noreferrer"&gt;Copilot Studio security and governance&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.7 Run solution checker on agent solutions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Static analysis catches structural problems in agents the same way it does in apps and flows — missing fallbacks, knowledge sources without authentication, references to blocked connectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Solution checker runs at solution import in Managed Environments. Mechanics are covered in section 12.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-solution-checker" rel="noopener noreferrer"&gt;Solution checker enforcement&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.8 Govern AI features per environment group
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Generative and external AI features carry different risk profiles in different environments. Production with regulated data needs a stricter stance than a pilot environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the &lt;code&gt;AI-powered Copilot features&lt;/code&gt;, &lt;code&gt;Generative AI settings&lt;/code&gt;, &lt;code&gt;External models&lt;/code&gt;, &lt;code&gt;AI prompts&lt;/code&gt;, and &lt;code&gt;Preview and experimental AI models&lt;/code&gt; rules to turn capabilities off where they should not be available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups-rules" rel="noopener noreferrer"&gt;Rules for environment groups&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.9 Control transcript access
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Conversation transcripts can contain sensitive prompts and customer data. Default-on transcript retention is a poor fit for regulated environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; The &lt;code&gt;Accessing transcripts from conversations in Copilot Studio agents&lt;/code&gt; rule turns transcript retention off for environments in regulated groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups-rules" rel="noopener noreferrer"&gt;Rules for environment groups&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.10 Block high-risk agent connectors in DLP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; DLP on agent connectors is the only way to stop entire classes of bad behavior at design time — public agents, ad-hoc HTTP, autonomous triggers — without playing whack-a-mole.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Common blocks for regulated tenants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Chat without Microsoft Entra ID authentication in Copilot Studio&lt;/code&gt;&lt;/strong&gt; — prevents publishing public, unauthenticated agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Direct Line channels in Copilot Studio&lt;/code&gt;&lt;/strong&gt; — block if only Teams, SharePoint, and Microsoft 365 Copilot channels are approved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Skills&lt;/code&gt;&lt;/strong&gt; — prevents invocation of arbitrary Bot Framework skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;HTTP requests&lt;/code&gt;&lt;/strong&gt; — prevents ad-hoc outbound calls from agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Event triggers&lt;/code&gt;&lt;/strong&gt; — disables autonomous agents until they are approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enforcement is real time; makers see validation errors while authoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-data-loss-prevention" rel="noopener noreferrer"&gt;Configure data policies for agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.11 Constrain knowledge sources
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Knowledge sources are how agents reach data. A loose knowledge configuration is a loose data perimeter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply scope-aware controls to each source type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A broad SharePoint URL grants the agent the site’s entire content tree — to makers who already have access. Grant scope at the document library or folder level where possible.&lt;/li&gt;
&lt;li&gt;Public website knowledge is fetched at runtime; treat it as untrusted input for prompt-injection exposure.&lt;/li&gt;
&lt;li&gt;Files uploaded as knowledge are stored in the agent’s Dataverse tables and inherit environment backup and data residency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;strong&gt;sensitivity labels&lt;/strong&gt; and &lt;strong&gt;Microsoft Purview&lt;/strong&gt; to label and classify content before it is indexed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-security-and-governance" rel="noopener noreferrer"&gt;Copilot Studio security and governance&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.12 Pick an authentication mode per agent
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Authentication mode determines whether sharing limits apply at all. Sharing limits apply only to agents that require authentication; public agents bypass the sharing model entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Three modes exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate with Microsoft&lt;/strong&gt; (Entra ID, default) — recommended for regulated environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate manually&lt;/strong&gt; — generic OAuth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No authentication&lt;/strong&gt; — public; not recommended for tenants with sensitive data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Require Entra ID authentication in regulated environments by blocking the no-authentication connector in DLP. Blocking no-authentication is the prerequisite for sharing limits to be meaningful at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/configuration-end-user-authentication" rel="noopener noreferrer"&gt;Configure user authentication&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.13 Approve a deployment channel matrix
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Each channel has its own risk profile and operational model. Without an approved matrix, channel selection becomes a maker-by-maker decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Enforce an approved channel matrix through tenant settings and DLP:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel&lt;/th&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Teams&lt;/td&gt;
&lt;td&gt;Admin-approved app catalog; manifests are solution-aware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft 365 Copilot&lt;/td&gt;
&lt;td&gt;Tenant Copilot extension governance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharePoint&lt;/td&gt;
&lt;td&gt;Site permissions; viewer licensing applies at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom website&lt;/td&gt;
&lt;td&gt;Block for regulated environments; pair with IP allow-list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct Line&lt;/td&gt;
&lt;td&gt;Block by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-security-and-governance" rel="noopener noreferrer"&gt;Copilot Studio security and governance&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.14 Monitor agents with the right surface for the question
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Different questions have different right surfaces. Behavior questions, audit questions, and inventory questions each have a primary tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Match the surface to the question:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent analytics&lt;/strong&gt; in Copilot Studio for sessions, resolution rate, and escalations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot Studio audit logs&lt;/strong&gt; in Microsoft Purview for create, publish, share, knowledge change, and tool add events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Insights export&lt;/strong&gt; (Managed Environments) for detailed traces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power Platform admin center Inventory&lt;/strong&gt; (and the &lt;strong&gt;Power Platform inventory API&lt;/strong&gt; / &lt;strong&gt;Power Platform for Admins V2&lt;/strong&gt; connector) for owner, environment, authentication mode, and last publish across all agents in the tenant. This is the replacement surface for the CoE Starter Kit’s &lt;code&gt;Power Platform agents&lt;/code&gt; inventory table, which is no longer actively maintained.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-logging-copilot-studio" rel="noopener noreferrer"&gt;Copilot Studio audit logs in Purview&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/programmability-authentication-v2" rel="noopener noreferrer"&gt;Power Platform inventory API&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.15 Treat autonomous agents as a higher-risk class
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Autonomous (event-triggered) agents run without interactive sessions, which expands the attack surface and removes the human-in-the-loop signal that interactive agents give you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Keep autonomous agents in a dedicated environment, require code review on triggers, and disable them with the &lt;code&gt;Event triggers&lt;/code&gt; DLP connector in environments that are not ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-data-loss-prevention" rel="noopener noreferrer"&gt;Configure data policies for agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  9.16 Govern MCP servers as connectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Model Context Protocol (MCP) servers extend agents with external tools. From a governance standpoint, each MCP server is an external connector; treating it informally creates an unaudited integration path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Treat each MCP server as a custom connector for governance: review the server code or vendor, restrict outbound network paths, and block ad-hoc registration by makers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/mcp" rel="noopener noreferrer"&gt;Agents and MCP&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  10. Agent Authentication and Connector Governance
&lt;/h2&gt;

&lt;p&gt;Agents built in Copilot Studio interact with data and services through connectors, knowledge sources, and tools. Connector governance for agents uses the same Power Platform DLP engine applied to Power Apps and Power Automate, but a few controls are agent-specific.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.1 Choose an authentication mode
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Authentication mode determines who can use the agent and whether platform sharing controls apply at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Pick one of three modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate with Microsoft&lt;/strong&gt; (default) — uses Microsoft Entra ID. The agent requires sign-in; sharing limits apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate manually&lt;/strong&gt; — generic OAuth 2.0 (Okta, Auth0, custom IdP). Agent requires sign-in but identity lives outside Entra ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No authentication&lt;/strong&gt; — public link or embedded web chat. Sharing limits are bypassed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Block the connector &lt;code&gt;Chat without Microsoft Entra ID authentication in Copilot Studio&lt;/code&gt; in the tenant baseline DLP to remove the &lt;code&gt;No authentication&lt;/code&gt; option entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/configuration-end-user-authentication" rel="noopener noreferrer"&gt;Configure user authentication&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.2 Use Entra Agent ID for outbound calls
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Older agent integrations relied on stored client secrets, which are awkward to rotate and easy to leak. Entra Agent ID replaces that pattern with a managed identity model that the platform owns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Each Copilot Studio agent is automatically provisioned with its own Entra Agent ID — a Microsoft Entra service principal of subtype &lt;code&gt;Agent&lt;/code&gt; — when the agent is created. The agent presents this identity on outbound calls. Administrators do not configure trusted app registrations for “agent federation”; the Agent ID is managed by the platform and visible in the Entra ID portal under enterprise applications. Where legacy connectors still rely on stored secrets, rotate them through Azure Key Vault.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-entra-agent-id" rel="noopener noreferrer"&gt;Entra Agent ID for Copilot Studio agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.3 Block high-risk connectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A handful of connectors account for most of the risk in agent tooling. Blocking them by default forces every exception to be justified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Common blocks for regulated tenants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HTTP&lt;/code&gt;, &lt;code&gt;HTTP with Microsoft Entra ID&lt;/code&gt; (or endpoint-filter them to an allow-list).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Chat without Microsoft Entra ID authentication in Copilot Studio&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Skills&lt;/code&gt; (Bot Framework skills as tools).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Event triggers&lt;/code&gt; (autonomous agents).&lt;/li&gt;
&lt;li&gt;Custom connectors unless catalog-approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-data-loss-prevention" rel="noopener noreferrer"&gt;Configure data policies for agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.4 Use action control for partial approval
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Some connectors are too useful to block entirely but too dangerous to allow in full. Action control gives you a middle ground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Allow read actions and block write actions on high-risk connectors — for example, allow &lt;code&gt;Get rows&lt;/code&gt; on SQL Server but block &lt;code&gt;Execute a SQL query&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/connector-action-control" rel="noopener noreferrer"&gt;Connector action control&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.5 A scripted policy baseline
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A baseline that lives only in the UI is not portable across tenants and not testable in code review. PowerShell-defined baselines fix both problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; A starter snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-DlpPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Agent baseline"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-ConnectorToBusinessDataGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-PolicyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$policy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ConnectorName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;shared_sharepointonline&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-ConnectorToBlockedGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-PolicyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$policy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ConnectorName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;shared_logicflows_http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-DlpPolicyDefaultConnectorGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-PolicyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$policy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DefaultGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Blocked&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/powerapps-powershell#data-loss-prevention-dlp-policy-commands" rel="noopener noreferrer"&gt;DLP PowerShell cmdlets&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.6 Govern tools, prompts, and MCP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Agents do more than call connectors. Prompt content and external tools are governance surfaces in their own right; ignoring them leaves a hole the connector model alone cannot close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Govern each surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generative orchestration&lt;/strong&gt; with built-in prompts — control via the &lt;code&gt;AI prompts&lt;/code&gt; and &lt;code&gt;Generative AI settings&lt;/code&gt; rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom prompts&lt;/strong&gt; (prompt columns, AI Builder prompts) — audit through Dataverse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP servers&lt;/strong&gt; as external tools — treat each server as a connector and inventory via the Copilot Studio admin center.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/mcp" rel="noopener noreferrer"&gt;Agents and MCP&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.7 Constrain knowledge sources upstream
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Knowledge sources are the easiest way for an agent to reach data the maker should not be able to reach. Upstream labels and authentication requirements close that gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply layered controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Require authenticated SharePoint sources; block public websites in regulated environments.&lt;/li&gt;
&lt;li&gt;Apply Microsoft Purview sensitivity labels upstream; agents honor label-based access for SharePoint and OneDrive content.&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;Accessing transcripts from conversations in Copilot Studio agents&lt;/code&gt; rule to block transcript retention where conversations could contain sensitive prompts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/purview/sensitivity-labels" rel="noopener noreferrer"&gt;Purview sensitivity labels for Copilot&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/connector-endpoint-filtering" rel="noopener noreferrer"&gt;Endpoint filtering&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Application Lifecycle Management and Pipelines
&lt;/h2&gt;

&lt;p&gt;Application Lifecycle Management (ALM) for Power Platform is built on &lt;strong&gt;solutions&lt;/strong&gt;. A solution is a versioned container for apps, flows, agents, tables, roles, and environment variables. Movement between environments always goes through solution export and import — manually, via Power Platform Pipelines, or via Azure DevOps or GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.1 Treat solutions as the unit of deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Solutions give you a versioned, traceable artifact. The Default Solution does not; deploying out of it is how teams lose change history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use one solution per deployable unit and avoid the &lt;strong&gt;Default Solution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/basics-alm" rel="noopener noreferrer"&gt;ALM basics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 Make flows solution-aware
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Non-solution-aware flows do not move cleanly between environments. Teams that skip this setting end up rebuilding flows in production by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Turn on &lt;code&gt;Default to creating new cloud flows as solution-aware&lt;/code&gt; so every new flow lands in a solution by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/basics-alm" rel="noopener noreferrer"&gt;ALM basics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.3 Use environment variables and connection references
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Hard-coded connection strings and configuration values break promotion. Variables and references decouple configuration from solution content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use &lt;strong&gt;environment variables&lt;/strong&gt; for configuration and &lt;strong&gt;connection references&lt;/strong&gt; for flows and agents so connections can be rebound per environment without editing solution content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/basics-alm" rel="noopener noreferrer"&gt;ALM basics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.4 Version solutions semantically
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Semantic versioning makes it possible to reason about what changed between releases. Without it, “version 7” tells you nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use semantic versioning (&lt;code&gt;1.4.2&lt;/code&gt;) and tag the source control commit that produced each version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/basics-alm" rel="noopener noreferrer"&gt;ALM basics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.5 Adopt Power Platform Pipelines for native deployment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Pipelines provide a deployment surface that runs inside the Power Platform itself — no external CI/CD required. For most low-code teams, they are the right starting point, and as of 2024 Microsoft has positioned them as the &lt;strong&gt;strategic replacement for the now-deprecated ALM Accelerator for Power Platform&lt;/strong&gt; (covered in 11.6).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Pipelines require a &lt;strong&gt;host environment&lt;/strong&gt; that is a Managed Environment. Source and target environments are registered in the host. A deployment imports a solution, rebinds connection references, and runs solution checker. Approvals can be attached to deployment stages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/pipelines" rel="noopener noreferrer"&gt;Power Platform Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.6 Set up the pipelines host (and migrate off the ALM Accelerator)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Two pieces of status to keep straight when standing up native ALM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The ALM Accelerator for Power Platform is formally deprecated (Microsoft Learn page last updated 2024-04-24).&lt;/strong&gt; Microsoft’s overview page is now titled &lt;em&gt;“ALM Accelerator for Power Platform (Deprecated)”&lt;/em&gt; and carries this notice: &lt;em&gt;“The ALM Accelerator is deprecated and will be removed in a future release. Use Pipelines in Power Platform to bring ALM automation capabilities to Power Platform and Dynamics 365 services. Pipelines can be used with source code integration or extended to integrate with other providers.”&lt;/em&gt; The accelerator was a canvas-app-plus-Azure-Pipelines reference implementation; the strategic replacement is the native Power Platform Pipelines experience described in 11.5. The accelerator continues to function for now, but no new investment is going into it and it is on track to be removed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pipelines host solution is not the CoE Starter Kit.&lt;/strong&gt; They are different solutions with different purposes; conflating them leads to stalled rollouts. (The CoE Starter Kit itself is also no longer actively maintained — see part 1, section 8.6 — but that is a separate transition from the ALM Accelerator one.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Install the &lt;strong&gt;Power Platform Pipelines&lt;/strong&gt; managed solution in the host environment (sometimes referenced as the &lt;em&gt;Deployment Pipeline Configuration&lt;/em&gt; app). Register environments in the &lt;code&gt;Deployment Environments&lt;/code&gt; table. If your tenant currently runs on the ALM Accelerator canvas app and Azure DevOps templates, treat this as the trigger to plan a migration to Pipelines — start by mapping each accelerator pipeline to a Pipelines stage, then route new solutions through Pipelines and freeze the accelerator pipelines for net-new work. Source-control integration is on the Pipelines roadmap; if you need it today, fall back to Build Tools or GitHub Actions (11.10) rather than to the accelerator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/set-up-pipelines" rel="noopener noreferrer"&gt;Set up Pipelines&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/guidance/alm-accelerator/overview" rel="noopener noreferrer"&gt;ALM Accelerator for Power Platform (Deprecated)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.7 Run pipelines as service principals
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Pipelines should not depend on a human account that might leave the company. Service principals carry their own lifecycle and credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Assign a service principal with &lt;code&gt;System Administrator&lt;/code&gt; in source and target environments. Use a &lt;strong&gt;delegated service account&lt;/strong&gt; or &lt;strong&gt;managed identity&lt;/strong&gt; where supported to avoid storing client secrets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/manage-application-users" rel="noopener noreferrer"&gt;Application users&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.8 Promote solutions with the PAC CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Manual export and import via the UI is fine for one-off moves but not for repeatable deployments. The CLI is what survives review, automation, and offboarding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; A typical export/import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac auth create &lt;span class="nt"&gt;--url&lt;/span&gt; https://dev.crm.dynamics.com
pac solution &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; HRSolution &lt;span class="nt"&gt;--path&lt;/span&gt; ./HRSolution.zip &lt;span class="nt"&gt;--managed&lt;/span&gt;
pac auth create &lt;span class="nt"&gt;--url&lt;/span&gt; https://test.crm.dynamics.com
pac solution import &lt;span class="nt"&gt;--path&lt;/span&gt; ./HRSolution.zip &lt;span class="nt"&gt;--force-overwrite&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/developer/cli/reference/pipeline" rel="noopener noreferrer"&gt;pac pipeline reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.9 Trigger a pipeline deployment from the CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Pipeline runs should be drivable from automation. The CLI provides exactly the surface needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Authenticate against the source environment first, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac pipeline deploy &lt;span class="nt"&gt;--solutionName&lt;/span&gt; HRSolution &lt;span class="sb"&gt;`&lt;/span&gt;
                    &lt;span class="nt"&gt;--currentVersion&lt;/span&gt; 1.4.1 &lt;span class="sb"&gt;`&lt;/span&gt;
                    &lt;span class="nt"&gt;--newVersion&lt;/span&gt; 1.4.2 &lt;span class="sb"&gt;`&lt;/span&gt;
                    &lt;span class="nt"&gt;--stageId&lt;/span&gt; &amp;lt;stageId&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The active &lt;code&gt;pac auth&lt;/code&gt; profile selects the pipeline; deployment notes are not a CLI argument and are added through the admin UI when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/developer/cli/reference/pipeline" rel="noopener noreferrer"&gt;pac pipeline reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.10 Use Azure DevOps or GitHub when policy requires it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Native pipelines are the right tool for most low-code teams, but they do not cover every release scenario — external approvals, multi-stack coordination, artifact signing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Power Platform Build Tools&lt;/strong&gt; (Azure DevOps) and &lt;strong&gt;Power Platform Actions&lt;/strong&gt; (GitHub) expose the same CLI commands as pipeline tasks. Use them when the release policy requires capabilities the native pipelines do not have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/devops-build-tools" rel="noopener noreferrer"&gt;Power Platform Build Tools&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/alm/devops-github-actions" rel="noopener noreferrer"&gt;GitHub Actions for Power Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.11 Deploy managed, not unmanaged, to higher environments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Unmanaged solutions in production allow layered customization that erodes traceability. Managed solutions force changes back through ALM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Deploy &lt;strong&gt;managed&lt;/strong&gt; solutions to test and production. Use the environment group rule &lt;code&gt;Unmanaged customizations&lt;/code&gt; to block unmanaged changes in production groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/basics-alm" rel="noopener noreferrer"&gt;ALM basics&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Solution Checker and Quality Gates
&lt;/h2&gt;

&lt;p&gt;Solution checker is a static-analysis engine that inspects solution contents against a Microsoft-maintained rule set. It runs on canvas apps, model-driven apps, Power Fx, Dataverse customizations, plug-ins, web resources, cloud flows, and Copilot Studio agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.1 Run on demand for fast feedback
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Makers and reviewers want feedback before they commit, not after the fact. On-demand runs close that gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Run from the Power Platform admin center, from &lt;code&gt;make.powerapps.com&lt;/code&gt;, or with &lt;code&gt;pac solution check&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/checker-api/overview" rel="noopener noreferrer"&gt;Solution checker&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.2 Integrate with pipelines
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Manual runs depend on discipline. Pipeline-integrated runs depend on configuration, which is more reliable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Solution checker runs automatically before deployment in Power Platform Pipelines. No additional setup is needed beyond registering the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/pipelines" rel="noopener noreferrer"&gt;Power Platform Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.3 Enforce at solution import
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A warning that does not block is a warning that gets ignored. Enforcement turns solution checker into an actual gate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In Managed Environments, set &lt;code&gt;Solution checker enforcement&lt;/code&gt; to &lt;code&gt;Warn&lt;/code&gt; or &lt;code&gt;Block&lt;/code&gt; for solution import. At &lt;code&gt;Block&lt;/code&gt;, an import containing a rule violation at or above the threshold fails with the list of offending components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-solution-checker" rel="noopener noreferrer"&gt;Solution checker enforcement&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.4 Understand the rule categories
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Knowing what solution checker looks for helps you read the output and prioritize fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; The rule categories are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; — use of &lt;code&gt;Execute Fetch&lt;/code&gt; with user-supplied input, open redirects in web resources, plug-in secrets in traces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — non-delegable queries in canvas apps, missing indexes in Dataverse, synchronous plug-ins on create/update of high-volume tables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability&lt;/strong&gt; — missing connection references, hard-coded GUIDs, deprecated API calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt; — missing error handling in flows, unbounded loops, overlapping workflow triggers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/checker-api/rules" rel="noopener noreferrer"&gt;Rule reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.5 Run from the CLI and consume SARIF
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Output that can be parsed by the rest of your toolchain is output that gets used. SARIF is the lingua franca of code scanners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Run with the CLI and consume the SARIF output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac solution check &lt;span class="nt"&gt;--path&lt;/span&gt; ./HRSolution.zip &lt;span class="sb"&gt;`&lt;/span&gt;
                   &lt;span class="nt"&gt;--geo&lt;/span&gt; europe &lt;span class="sb"&gt;`&lt;/span&gt;
                   &lt;span class="nt"&gt;--ruleSetName&lt;/span&gt; &lt;span class="s2"&gt;"Solution Checker"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI returns a SARIF file that can be uploaded to GitHub code scanning or parsed in Azure DevOps. Severity is one of &lt;code&gt;High&lt;/code&gt;, &lt;code&gt;Medium&lt;/code&gt;, &lt;code&gt;Low&lt;/code&gt;, &lt;code&gt;Informational&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/developer/cli/reference/solution#pac-solution-check" rel="noopener noreferrer"&gt;pac solution check&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.6 Configure enforcement thresholds explicitly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Default thresholds may not match your risk tolerance. Configuration makes the threshold explicit instead of implicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In the admin center, &lt;code&gt;Edit Managed Environments &amp;gt; Solution checker&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enforcement: Block
Severity threshold: High
Exclusion rules: (solution-specific overrides)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-solution-checker" rel="noopener noreferrer"&gt;Solution checker enforcement&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.7 Use agent-specific checks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Agents have failure modes apps and flows do not — missing fallbacks, public knowledge, blocked-channel publish. Solution checker covers them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Solution checker validates Copilot Studio agents for unused topics, missing fallback, knowledge sources without authentication, publish to blocked channels, and references to DLP-blocked connectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/checker-api/overview" rel="noopener noreferrer"&gt;Solution checker&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.8 Add agent evaluations for behavioral quality
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Solution checker validates structure, not behavior. Behavioral quality — does the agent give the right answer to the right prompt — needs a separate gate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Copilot Studio includes &lt;strong&gt;agent evaluations&lt;/strong&gt; : define test sets of prompts and expected behaviors, then run them before publish. Evaluations are complementary to solution checker, not a replacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/authoring-agent-evaluations" rel="noopener noreferrer"&gt;Agent evaluations&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Licensing and Capacity Governance
&lt;/h2&gt;

&lt;p&gt;Licensing is a governance concern because runtime usage of Power Platform and Copilot Studio is gated by assigned licenses and consumed capacity. Capacity misconfiguration is a leading cause of outages.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.1 Pick the right Power Apps license model
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Per-app and per-user pricing have different break-even points. Choosing the wrong one for your usage pattern overpays for licenses or under-provisions makers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Power Apps&lt;/strong&gt; ships per user or per app. Per-app covers one or two apps per user; per-user covers unlimited apps. Pick based on the number of apps the average user consumes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/pricing-billing-skus" rel="noopener noreferrer"&gt;Power Platform licensing overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.2 Match Power Automate plans to flow type
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Per-user, per-flow, and process plans suit different scenarios. Buying the wrong plan creates a cliff: either you over-license low-volume flows or run out of capacity on high-volume ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Power Automate&lt;/strong&gt; ships per user (user plan) or per flow (hosted plan). Process plans allocate capacity to a single flow, typically for RPA workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/pricing-billing-skus" rel="noopener noreferrer"&gt;Power Platform licensing overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.3 Allocate Dataverse capacity per environment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Without explicit allocation, environments draw from the tenant pool until exhausted. When the pool is gone, every over-pool environment goes read-only at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Dataverse capacity (database, file, log) accrues per tenant and is allocated per environment. Assign capacity explicitly under &lt;code&gt;Resources &amp;gt; Capacity &amp;gt; Environments&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/capacity-storage" rel="noopener noreferrer"&gt;Capacity in admin center&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.4 Plan Copilot Studio consumption
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Copilot Studio consumption is metered in credits, and there is no hard tenant-wide cap. Budget alerts, not blocks, are the primary guard against runaway spend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Copilot Studio&lt;/strong&gt; consumes &lt;strong&gt;Copilot Credits&lt;/strong&gt; per message, sold as &lt;strong&gt;prepaid capacity&lt;/strong&gt; or &lt;strong&gt;pay-as-you-go&lt;/strong&gt; (PAYG). Microsoft 365 Copilot user licenses include a separate allowance. Each agent message consumes credits based on type (generative answers, actions, autonomous events). Constraints to plan for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PAYG requires the &lt;strong&gt;Dataverse Azure subscription meter&lt;/strong&gt; configured at the environment level; without it, PAYG is inactive.&lt;/li&gt;
&lt;li&gt;No hard tenant-wide consumption cap exists today.&lt;/li&gt;
&lt;li&gt;Consumption reporting is in &lt;code&gt;Resources &amp;gt; Capacity &amp;gt; Copilot Studio&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitor trends weekly and set Azure budget alerts on the PAYG meter subscription.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/requirements-licensing-subscriptions" rel="noopener noreferrer"&gt;Copilot Studio licensing&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/pay-as-you-go-overview" rel="noopener noreferrer"&gt;Pay-as-you-go setup&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.5 License Power Pages by site capacity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Power Pages licensing is per-site, not per-user, which is easy to miss when projecting cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Power Pages&lt;/strong&gt; is licensed by authenticated or anonymous user capacity per site. Plan capacity per site, not per identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/pricing-billing-skus" rel="noopener noreferrer"&gt;Power Platform licensing overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.6 Use group-based licensing and audit monthly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Direct license assignment leaves orphaned licenses behind when users leave. Group-based licensing keeps assignment in sync with employment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use Microsoft Entra ID group-based licensing. Audit monthly with PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Connect-MgGraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Scopes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Directory.Read.All"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-MgUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-All&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Property&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AssignedLicenses&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;UserPrincipalName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Where-Object&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="bp"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AssignedLicenses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SkuId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-contains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;Power Apps Per User SKU&amp;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="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UserPrincipalName&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/pricing-billing-skus" rel="noopener noreferrer"&gt;Power Platform licensing overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.7 Account for Developer Plan environments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Developer environments are free per user but count against tenant environment quotas. Without a plan, they accumulate quietly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt;  &lt;strong&gt;Power Apps Developer Plan&lt;/strong&gt; provides a free, single-user environment for learning. Use default environment routing to manage developer environments centrally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/developer/plan" rel="noopener noreferrer"&gt;Developer Plan&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Change Management and Release Rings
&lt;/h2&gt;

&lt;p&gt;Power Platform receives continuous updates from Microsoft and from in-tenant makers. A change management practice that controls both streams keeps environments predictable.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.1 Choose a release channel per environment group
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Microsoft pushes updates continuously. Channels let you control whether an environment gets updates as soon as they ship or after a slower validation period — a critical lever for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Power Platform environments support two channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto&lt;/strong&gt; (default) — updates arrive as they are released to ring-by-ring deployment. Recommended for production environments where stability is achieved through Microsoft’s own gradual rollout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly&lt;/strong&gt; — fixed monthly cadence; let’s pilot environments to preview the next set of updates before they reach Auto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set the channel with the environment group rule &lt;strong&gt;Release channel&lt;/strong&gt;. Production groups typically stay on &lt;code&gt;Auto&lt;/code&gt;; pilot groups use &lt;code&gt;Monthly&lt;/code&gt; for early validation. (There is no “Semi-Annual” channel for Power Platform — that term applies to Microsoft 365 Apps update channels, not Power Platform environments.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/release-channels" rel="noopener noreferrer"&gt;Release channels&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.2 Track Microsoft release waves
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Release waves announce major capability changes twice a year. They are how you anticipate behavior changes that channels alone cannot smooth over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Track release waves through the Microsoft Dynamics 365 release plans site and surface relevant items in your CoE communications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/dynamics365/release-plans/" rel="noopener noreferrer"&gt;Release waves&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.3 Gate previews and experimental features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Preview features can disappear, change behavior, or carry undocumented limits. They do not belong in regulated environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the &lt;code&gt;Generative AI settings&lt;/code&gt; and &lt;code&gt;Preview and experimental AI models&lt;/code&gt; rules at the environment group level to gate preview capabilities. Keep previews off in regulated groups; enable in a pilot group with representative data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups-rules" rel="noopener noreferrer"&gt;Rules for environment groups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.4 Define in-tenant change categories
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Treating every deployment the same way over-controls routine changes and under-controls risky ones. Categories let you match scrutiny to risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply the same change categories used in traditional IT:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt; (pre-approved) — patch increments of an existing solution, deployed via pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normal&lt;/strong&gt; — new apps, flows, or agents; requires CoE or architecture review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emergency&lt;/strong&gt; — hotfixes; post-implementation review required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each category maps to a pipeline approval configuration. Approvals are implemented as Dataverse records in the pipelines host with Azure AD group-based reviewer lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/pipelines" rel="noopener noreferrer"&gt;Power Platform Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.5 Use administration mode during deployments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Deploying while users are active risks corrupted state and poor user experience. Administration mode blocks user traffic while the change is being made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Enable administration mode with the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac admin set-runtime-state &lt;span class="nt"&gt;--runtime-state&lt;/span&gt; AdminMode

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Revert with &lt;code&gt;--runtime-state Enabled&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/admin-mode" rel="noopener noreferrer"&gt;Administration mode&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.6 Take a manual backup before risky changes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Automatic backups follow a schedule; risky changes do not. A manual restore point taken just before a deployment is the cheapest insurance available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Run &lt;code&gt;pac admin backup&lt;/code&gt; to create a manual restore point. Set the &lt;strong&gt;Backup retention&lt;/strong&gt; rule to at least 28 days for production groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/backup-restore-environments" rel="noopener noreferrer"&gt;Manual backups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.7 Communicate changes through known channels
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Surprises drive support volume. The cheapest way to reduce surprise is to communicate changes through channels the audience already reads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Layer three channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Message Center&lt;/strong&gt; in the Microsoft 365 admin center surfaces Power Platform MC alerts. Subscribe Power Platform admins and CoE members.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Maker welcome content&lt;/strong&gt; rule to publish in-product notices for upcoming behavior changes.&lt;/li&gt;
&lt;li&gt;Maintain a tenant changelog in the CoE environment, linking MC IDs, affected environments, and owners.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-365/admin/manage/message-center" rel="noopener noreferrer"&gt;Message Center&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.8 Plan for rollback
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Rollback in Power Platform is limited and asymmetric. Pretending it is straightforward leads to ugly outages when something does need to be reversed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Rollback is constrained to Dataverse restore points and solution re-import of a prior version. Canvas apps retain version history; model-driven apps roll back via solution version. For Copilot Studio, earlier agent versions can be restored from the agent version list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/backup-restore-environments" rel="noopener noreferrer"&gt;Manual backups&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/authoring-publish-basics" rel="noopener noreferrer"&gt;Copilot Studio agent versions&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: bringing both parts together
&lt;/h2&gt;

&lt;p&gt;Power Platform governance is not a single product, a single policy, or a single role. Across the two articles in this reference, the cumulative result is shown to be the result of many small, well-placed controls working together. Part 1 covered the platform on which everything stands: an environment topology that matches how the organization actually builds, a default environment treated as a perimeter rather than a playground, Managed Environments and environment groups that make policy enforceable at scale, DLP and tenant isolation that bound where data can move, identity and Conditional Access that decide who is allowed to touch the platform at all, and monitoring that turns activity into evidence. Part 2 covered everything that runs on that platform: Copilot Studio controls that extend the same model to AI agents, agent authentication and connector governance that shape what agents are allowed to do, ALM and pipelines that move solutions through environments traceably, solution checker and agent evaluations that gate quality at import and publish, licensing and capacity governance that prevent runtime surprises, and change management practices that absorb both Microsoft’s rollouts and your own without disrupting users.&lt;/p&gt;

&lt;p&gt;The two halves only work together. Part 1’s controls are not useful without something to govern; part 2’s controls do not stick without the foundations underneath them. Sharing limits matter only because Managed Environments make them enforceable. Solution checker enforcement matters only because environmental groups can apply it consistently. Entra Agent ID matters only because Conditional Access gates the identities of those agents present. The two articles are designed to be read as a single document, split for readability, not as independent pieces.&lt;/p&gt;

&lt;p&gt;The controls described across both parts already exist in the platform today. None of them requires custom engineering, third-party tooling, or preview access to be useful. What they require is decision-making: which environments belong in which group, which connectors are business versus non-business, which agents must authenticate with Microsoft Entra ID, which release channel each group follows, who approves a production deployment, and where the lines are drawn between regulated and general-purpose work. Those decisions &lt;em&gt;are&lt;/em&gt; governance.&lt;/p&gt;

&lt;p&gt;Start small and iterate. A minimum viable posture across both articles is: restrict default environment creation, attach a tenant-wide baseline DLP policy, enable default environment routing with a Managed Environments group, turn on tenant-level analytics, lean on the Power Platform admin center’s &lt;strong&gt;Inventory&lt;/strong&gt; , &lt;strong&gt;Usage&lt;/strong&gt; , &lt;strong&gt;Monitor&lt;/strong&gt; , and &lt;strong&gt;Actions&lt;/strong&gt; experiences (the CoE Starter Kit is no longer actively maintained), verify your tenant isolation defaults, require authenticated agents, run solution checker at import, deploy through &lt;strong&gt;Power Platform Pipelines&lt;/strong&gt; as a service principal (the strategic replacement for the now-deprecated ALM Accelerator), and set Auto channel for production with Monthly for a pilot ring. Everything else in these two articles is a refinement on that foundation. Governance that grows with the platform is governance that lasts; governance that is bolted on after an incident rarely recovers the ground it lost.&lt;/p&gt;

&lt;p&gt;Read this reference end to end once to map the territory, then return to it section by section as decisions come up. Both articles are designed to be skimmed for vocabulary and read closely when a specific control is at issue.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>agents</category>
      <category>governance</category>
      <category>powerplatform</category>
    </item>
    <item>
      <title>Power Platform Governance: A Practitioner's Reference (Part 1)</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 16 May 2026 07:15:44 +0000</pubDate>
      <link>https://dev.to/holgerimbery/power-platform-governance-a-practitioners-reference-part-1-120c</link>
      <guid>https://dev.to/holgerimbery/power-platform-governance-a-practitioners-reference-part-1-120c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary lede.&lt;/strong&gt; Power Platform and Copilot Studio now let every licensed Microsoft 365 user build apps, automations, and AI agents that touch enterprise data. This first part of a two-article reference walks through the platform-level foundations that everything else rests on — environment strategy, default-environment hardening, Managed Environments, environment groups and rules, DLP, tenant isolation, identity, and monitoring — and shows how they combine into a coherent, enforceable posture. Part 2 next week will cover Copilot Studio governance, agent authentication, ALM and pipelines, solution checker, licensing, and change management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who this is for.&lt;/strong&gt; Power Platform administrators, security or compliance officers responsible for a Microsoft 365 tenant, Center of Excellence leads, architects, designing a low-code or AI-agent platform, and makers who want to understand the guardrails around the tools they build with. The document replaces fragmented documentation with an ordered walkthrough of what actually exists today: CLI snippets, PowerShell examples, and direct links to authoritative Microsoft Learn pages. Nothing here is speculative, so the patterns can be applied to a tenant without waiting for a future release. If you need to defend an environment posture to auditors, onboard a new admin, set priorities for a governance rollout, or decide what "good" looks like for your tenant, this gives you the vocabulary, the examples, and the reasoning in one place.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Power Platform and Copilot Studio have turned a large part of every Microsoft 365 tenant into a build surface. Employees who never wrote code are now authoring apps, flows, and AI agents that read from SharePoint, write to Dataverse, send email on behalf of users, and call external APIs. That shift changes the risk profile of the tenant in ways that are visible to three constituencies, each with a different stake.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;the business&lt;/strong&gt;, governance is what keeps low-code and AI investments returning value instead of accumulating liability. Ungoverned environments grow a long tail of half-finished apps, orphaned flows, and agents with unknown owners — each one a support ticket, compliance finding, or incident waiting to happen. Regulators increasingly ask who authored a control, what data it touched, and how changes were approved. A documented governance posture answers those questions without forensic archaeology and lets the business say &lt;em&gt;yes&lt;/em&gt; to new use cases because the controls are already in place.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;IT&lt;/strong&gt;, governance is the mechanism that preserves tenant integrity while the perimeter expands. Data Loss Prevention, tenant isolation, identity controls, and pipelines are not optional add-ons; they are how IT shifts from gatekeeper to platform operator. Without them, the only available stance is blanket denial — which does not reduce risk, because work simply moves to spreadsheets, personal accounts, and shadow SaaS where IT has no visibility at all. With them, IT can set guardrails at the platform level, delegate day-to-day authoring to business units, and focus engineering time on integrations, security, and automation.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;makers&lt;/strong&gt;, governance is the difference between building with confidence and building in the dark. Clear environment boundaries, known DLP rules, a predictable ALM path, and a Center of Excellence to turn to all reduce the cognitive load of citizen development. Makers who know what is allowed spend their time on business logic, not on working around unclear policy. Maker welcome content, solution checker, and sharing limits exist to shorten the feedback loop so that problems are caught while they are still cheap to fix.&lt;/p&gt;

&lt;p&gt;This first article works through the platform-level foundations: environment design, the default environment, Managed Environments, environment groups, DLP, tenant isolation, identity, and monitoring. Each control begins with the reason it exists, moves to the how, and points you to the authoritative Microsoft Learn page. Part 2 will build on this base by covering the resources that live inside those environments — Copilot Studio agents, ALM, licensing, and change management.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on the kits.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you are coming to this article expecting the &lt;strong&gt;CoE Starter Kit&lt;/strong&gt; or the &lt;strong&gt;ALM Accelerator&lt;/strong&gt; to do the governance heavy lifting: that picture has changed. Microsoft has confirmed that the &lt;strong&gt;CoE Starter Kit is no longer actively maintained&lt;/strong&gt; — its core capabilities are now part of the Power Platform admin center — and the &lt;strong&gt;ALM Accelerator for Power Platform is formally deprecated&lt;/strong&gt;, with &lt;strong&gt;Power Platform Pipelines&lt;/strong&gt; as the named replacement. Section 8.6 covers the CoE Starter Kit transition to the admin center; section 3.5 covers the ALM Accelerator → Pipelines transition; the rest of the article reflects that shift.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Environment Strategy
&lt;/h2&gt;

&lt;p&gt;An environment in Power Platform is a container for apps, flows, agents, connections, and Dataverse data. Environment design is the foundation of governance because DLP scope, security roles, capacity, and compliance boundaries all follow environment lines. Get the topology right and every later control has somewhere clean to attach. Get it wrong and you spend the rest of the rollout retrofitting policy onto a sprawl.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Know the environment types
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Each type carries different defaults for licensing, data residency, and lifecycle. Choosing the wrong type at provisioning time creates rework that is rarely cheap to undo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Five types are in active use today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt; — one per tenant, created automatically, open to every licensed user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production&lt;/strong&gt; — business-critical workloads, backed by Dataverse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox&lt;/strong&gt; — non-production, resettable, suitable for UAT and load tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer&lt;/strong&gt; — single-maker environments, created manually or via routing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trial&lt;/strong&gt; and &lt;strong&gt;Teams&lt;/strong&gt; — time-limited or chat-scoped; not recommended for production assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environments-overview" rel="noopener noreferrer"&gt;Environments overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Adopt a topology that mirrors your delivery lifecycle
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A topology aligned with how your organization actually builds shortens the path from idea to production and gives every governance rule (DLP, sharing limits, release channel) a natural place to land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; A typical enterprise pattern separates by lifecycle and purpose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default  -&amp;gt; personal productivity only (restricted)
DEV-*    -&amp;gt; per-maker or per-team developer environments
TEST-*   -&amp;gt; solution UAT with production-like data volume
PROD-*   -&amp;gt; published solutions, scoped by region or business unit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a dedicated &lt;strong&gt;CoE&lt;/strong&gt; environment for governance tooling (pipelines host and any remaining CoE Starter Kit components — see section 8.6 for the kit's status) and a &lt;strong&gt;training&lt;/strong&gt; environment for enablement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/guidance/adoption/environment-strategy" rel="noopener noreferrer"&gt;Establishing an environment strategy&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 Restrict who can create environments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Self-service environment creation is the fastest way to lose tenant-wide visibility. Most makers do not need to create environments; the few who do should be deliberately empowered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In tenant settings, configure &lt;code&gt;Who can create production and sandbox environments&lt;/code&gt; and &lt;code&gt;Who can create trial environments&lt;/code&gt; to limit creation to admins or a named CoE group. For repeatable provisioning, drive creation through the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac admin create &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"DEV-Finance-EU"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; Sandbox &lt;span class="nt"&gt;--region&lt;/span&gt; europe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/control-environment-creation" rel="noopener noreferrer"&gt;Control who can create environments&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/developer/cli/reference/admin" rel="noopener noreferrer"&gt;pac admin reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.4 Pick a region before you provision
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Environments are region-locked. Region determines data residency, latency, and which regional services (Application Insights endpoints, Dataverse data centers) integrate cleanly. Moving an environment between regions is not a supported operation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Choose the region from the regional catalog at provisioning time. For regulated workloads, pick the region that satisfies the controlling jurisdiction even if it is not where most of your users sit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/regions-overview" rel="noopener noreferrer"&gt;Environment regions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.5 Plan capacity before you turn on Dataverse
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Dataverse-enabled environments draw from a tenant-wide capacity pool. Capacity surprises are a leading cause of unplanned read-only mode in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Any Dataverse-enabled environment — production or sandbox — requires the tenant-level minimum of 1 GB of database capacity. Capacity is a tenant pool, not a per-environment allocation, so plan total tenant capacity against the number of Dataverse-enabled environments you intend to run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/about-storage-capacity" rel="noopener noreferrer"&gt;About Dataverse storage capacity&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.6 Isolate regulated workloads
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; DLP, security roles, and Dataverse auditing settings are scoped per environment. Mixing regulated and non-regulated workloads in the same environment forces every control to be the strictest common denominator and complicates compliance reporting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Provision separate environments for HR, Finance, and other regulated workloads. Each one becomes a clean target for environment-specific DLP, role assignments, and backup retention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/guidance/adoption/environment-strategy" rel="noopener noreferrer"&gt;Establishing an environment strategy&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Governing the Default Environment
&lt;/h2&gt;

&lt;p&gt;The default environment is the only environment created automatically in every Power Platform tenant. Every licensed user is a member and holds the &lt;code&gt;Environment Maker&lt;/code&gt; role, which lets them create apps, flows, connections, and Copilot Studio agents. It is always present, always writable, and cannot be deleted or renamed — which makes it the single most common source of shadow IT on the platform. It needs explicit governance, not benign neglect.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Understand what makes the default environment different
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Treating the default environment like any other production environment leads to surprises. Several behaviors are unique to it and cannot be disabled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Plan around four facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It cannot be deleted. It can be renamed and reassigned to a non-default type for display purposes, but Microsoft treats it as the fallback environment for personal productivity.&lt;/li&gt;
&lt;li&gt;Every new tenant user inherits &lt;code&gt;Environment Maker&lt;/code&gt;. There is no tenant setting that removes this role on the default environment.&lt;/li&gt;
&lt;li&gt;Dataverse is optional by default, but once added it cannot be removed.&lt;/li&gt;
&lt;li&gt;Connectors default to the same tenant-wide DLP policy as any other non-scoped environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environments-overview#the-default-environment" rel="noopener noreferrer"&gt;Default environment overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Rename and tag for clarity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Makers cannot make good decisions about where to build if the default environment looks like any other production candidate. The name is the first signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Rename the default environment to something like &lt;code&gt;Personal Productivity (Default)&lt;/code&gt; so its purpose is unambiguous. Apply a consistent solution-naming convention for any assets that genuinely belong there (such as personal flows).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environments-overview#the-default-environment" rel="noopener noreferrer"&gt;Default environment overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Attach a restrictive DLP policy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The default environment is where ungoverned makers land first. A restrictive DLP policy turns the blast radius from "every connector Microsoft ships" into a known, defensible set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Move risky connectors (HTTP, custom connectors, social media, unauthenticated agent chat) to &lt;code&gt;Blocked&lt;/code&gt;. Keep only Microsoft 365, Dataverse, and a short approved list in &lt;code&gt;Business&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/wp-data-loss-prevention" rel="noopener noreferrer"&gt;Data policies overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Keep Dataverse out (or contained) by default
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Once Dataverse is added to the default environment, it cannot be removed. Production data living next to ungoverned personal flows is a compliance problem that is hard to walk back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; If the default environment still lacks Dataverse, leave it off. Production data belongs in dedicated environments where capacity and backup are managed deliberately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environments-overview#the-default-environment" rel="noopener noreferrer"&gt;Default environment overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Constrain sharing through Managed Environments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Without sharing limits, a maker can publish an app or agent to the entire tenant with one click. The default environment is the most common origin for that mistake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Convert the default environment to a Managed Environment and apply &lt;code&gt;Limit sharing&lt;/code&gt; rules: cap the number of users an asset can be shared with and disable sharing through security groups. Mechanics are covered in section 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-sharing-limits" rel="noopener noreferrer"&gt;Limit sharing in Managed Environments&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.6 Enable default environment routing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The cleanest way to keep the default environment empty is to redirect new makers somewhere else automatically. Routing replaces "the default environment is where people end up" with "the default environment is where nobody builds."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Turn on &lt;strong&gt;default environment routing&lt;/strong&gt; under &lt;strong&gt;Settings &amp;gt; Default environment routing&lt;/strong&gt; in the Power Platform admin center. Each routed maker receives a personal developer environment; group those environments with &lt;strong&gt;Environment groups&lt;/strong&gt; and apply policies in bulk (sharing limits, maker welcome content, solution checker).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/default-environment-routing" rel="noopener noreferrer"&gt;Default environment routing&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups" rel="noopener noreferrer"&gt;Environment groups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.7 Lock down agents and Copilot in the default environment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Copilot Studio agents created in the default environment are immediately discoverable by all licensed users. Without explicit controls, makers can publish unauthenticated agents, call any non-blocked connector, and add knowledge sources the creator already has access to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply layered controls: convert the default environment to a Managed Environment, block the &lt;code&gt;Chat without Microsoft Entra ID authentication in Copilot Studio&lt;/code&gt; connector in DLP, block the &lt;code&gt;HTTP&lt;/code&gt; and &lt;code&gt;HTTP with Microsoft Entra ID&lt;/code&gt; connectors, and enable tenant-level Copilot Studio restrictions on who can publish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/microsoft-copilot-studio/admin-data-loss-prevention" rel="noopener noreferrer"&gt;Data policies for Copilot Studio&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/tenant-settings" rel="noopener noreferrer"&gt;Tenant settings reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.8 Turn on monitoring before you need it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Telemetry collected after an incident is worth less than telemetry collected before one. Get visibility on the default environment first, because that is where ungoverned activity tends to land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Enable &lt;strong&gt;tenant-level analytics&lt;/strong&gt; in the Power Platform admin center to capture telemetry. Use the admin center &lt;strong&gt;Inventory&lt;/strong&gt;, &lt;strong&gt;Usage&lt;/strong&gt;, &lt;strong&gt;Monitor&lt;/strong&gt;, and &lt;strong&gt;Actions&lt;/strong&gt; experiences to list apps, flows, and agents by owner — these have replaced the CoE Starter Kit inventory flows (see section 8.6). Review the Managed Environments &lt;strong&gt;weekly digest&lt;/strong&gt; for inactive and top-used assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/tenant-level-analytics" rel="noopener noreferrer"&gt;Tenant-level analytics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.9 A starting DLP stance
&lt;/h3&gt;

&lt;p&gt;The example below is not a policy you should ship verbatim, but it is a defensible starting point for a default environment that has no other governance in place:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Business group:    Microsoft 365 connectors (Outlook, SharePoint, Teams, OneDrive), Dataverse, Approvals
Non-business:      (empty)
Blocked:           HTTP, HTTP with Microsoft Entra ID, custom connectors,
                   Chat without Microsoft Entra ID authentication in Copilot Studio,
                   SMTP, FTP, social media connectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/create-dlp-policy" rel="noopener noreferrer"&gt;Create a data policy&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/control-environment-creation" rel="noopener noreferrer"&gt;Control environment creation&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Managed Environments
&lt;/h2&gt;

&lt;p&gt;Managed Environments is a premium governance layer that augments a standard environment with administrative controls. Enabling it does not change the environment's region, type, or Dataverse schema; it activates a set of tenant-visible features that admins can enforce. Most of the controls that follow in this document depend on Managed Environments being on.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Limit sharing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Uncontrolled sharing is one of the highest-impact governance gaps. A single misconfigured share can expose an app or agent to the entire tenant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Cap the number of users an app or agent can be shared with, block sharing through security groups, and block editor sharing. Configure under &lt;code&gt;Edit Managed Environments &amp;gt; Limit sharing&lt;/code&gt;. Rules apply on the next share action; existing assignments remain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-sharing-limits" rel="noopener noreferrer"&gt;Limit sharing&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Receive a weekly digest
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Admins do not have time to log into the admin center every day. A scheduled summary keeps inactive and top-used assets in front of them without manual polling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Power Platform and Dynamics 365 admins automatically receive an email summary covering active users, top apps, and inactive apps and flows. Add additional recipients via PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-TenantSettings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;powerPlatform&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;governance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Add-Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NotePropertyName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;additionalAdminDigestEmailRecipients&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nt"&gt;-NotePropertyValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'coe@contoso.com;ops@contoso.com'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-TenantSettings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-RequestBody&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$t&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-usage-insights" rel="noopener noreferrer"&gt;Usage insights (weekly digest)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Enforce solution checker
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Static analysis catches problems while they are cheap to fix. Without enforcement, solution checker becomes optional and stops being run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Run static analysis on solution import; warn or block. Configure under &lt;code&gt;Edit Managed Environments &amp;gt; Solution checker&lt;/code&gt; (mechanics in part 2, section 12).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-solution-checker" rel="noopener noreferrer"&gt;Solution checker enforcement&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Show maker welcome content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Makers who never see your governance guidance cannot follow it. The first experience inside the maker portals is the cheapest channel for organizational rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Configure a banner that appears for new makers in &lt;code&gt;make.powerapps.com&lt;/code&gt; and &lt;code&gt;copilotstudio.microsoft.com&lt;/code&gt;. Use it to point makers at internal documentation, the right environments, and approval processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-overview" rel="noopener noreferrer"&gt;Managed Environments overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.5 Host Power Platform Pipelines
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Power Platform Pipelines are the native, low-code path for promotion across environments. They require Managed Environments to run, and as of 2024 Microsoft has positioned them as the &lt;strong&gt;strategic replacement for the ALM Accelerator for Power Platform&lt;/strong&gt;, which is formally deprecated and slated for removal in a future release. New ALM rollouts should start here rather than on the accelerator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Designate a Managed Environment as the pipelines host (covered in part 2, section 11). Source and target environments are registered in the host. If your tenant currently runs on the ALM Accelerator canvas app + Azure DevOps templates, treat this as the trigger to plan a migration to Pipelines — the accelerator continues to function for now, but no new investment is going into it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/alm/pipelines" rel="noopener noreferrer"&gt;Power Platform Pipelines&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/guidance/alm-accelerator/overview" rel="noopener noreferrer"&gt;ALM Accelerator for Power Platform (Deprecated)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.6 Restrict Dataverse access by IP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Network-level controls reduce the attack surface even when identity controls are intact. They also satisfy auditors who expect defense in depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; &lt;strong&gt;IP firewall&lt;/strong&gt; restricts Dataverse access to declared IP ranges. &lt;strong&gt;IP cookie binding&lt;/strong&gt; adds session-level enforcement so that a stolen token cannot be replayed from a different network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/ip-firewall" rel="noopener noreferrer"&gt;IP firewall&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.7 Customer Lockbox and Customer-Managed Key
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Regulated tenants often need explicit approval before Microsoft engineers can access tenant data, and they need encryption keys under their own control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Customer Lockbox requires customer approval for Microsoft support access to environment data. Customer-Managed Key brings tenant-controlled keys into Dataverse encryption. Both require premium tenant licensing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-overview" rel="noopener noreferrer"&gt;Managed Environments overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.8 Extend backup retention
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The seven-day default backup window is short for production workloads. An incident discovered on day eight has no restore point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Managed Environments support extended retention windows beyond the seven-day default. Configure retention per environment or, for groups, via the &lt;code&gt;Back-up retention&lt;/code&gt; rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/backup-restore-environments" rel="noopener noreferrer"&gt;Manual backups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.9 DLP for desktop flows
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Desktop (RPA) flows can interact with anything on the host machine, which makes connector-level DLP particularly important for them. The control is gated behind Managed Environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply DLP policies to desktop flows the same way you apply them to cloud flows; enforcement happens at design and run time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/wp-data-loss-prevention" rel="noopener noreferrer"&gt;Data policies overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.10 Use the Catalog for internal distribution
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Without a catalog, reusable components are shared informally — by email, by chat, by file share — and traceability collapses. A catalog gives makers an approved internal store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Publish components (templates, connectors, plug-ins) to the Catalog so makers can install them with provenance and version metadata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-overview" rel="noopener noreferrer"&gt;Managed Environments overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.11 Plan for the licensing implications
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Managed Environments changes how runtime licensing works for users, and that change is the most common surprise during rollout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Every user who activates an app, flow, or agent in a Managed Environment must hold a premium Power Platform license (Power Apps per user/per app, Power Automate Premium, or Dynamics 365). Confirm license posture before flipping the switch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/pricing-billing-skus" rel="noopener noreferrer"&gt;Power Platform licensing overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.12 Enabling
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The toggle is per environment, so enablement is a deliberate act, not a tenant flag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In the Power Platform admin center, choose the environment, then &lt;code&gt;Edit Managed Environments&lt;/code&gt;. From the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac admin set-governance-config &lt;span class="nt"&gt;--environment-id&lt;/span&gt; &amp;lt;GUID&amp;gt; &lt;span class="nt"&gt;--protection-level&lt;/span&gt; Standard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-enable" rel="noopener noreferrer"&gt;Enable Managed Environments&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.13 When to enable
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Managed Environments costs licensing and increases admin overhead. Enabling it everywhere is wasteful; enabling it nowhere defeats the purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use Managed Environments for any environment with production workloads, external sharing, or sensitive data. Apply it to personal developer environments created by default environment routing so sharing limits and solution checker apply uniformly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-overview" rel="noopener noreferrer"&gt;Managed Environments overview&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Environment Groups and Rules
&lt;/h2&gt;

&lt;p&gt;Environment groups organize Managed Environments into collections so admins can apply policies in bulk. Each environment belongs to at most one group; groups cannot be nested or overlap; non-managed environments cannot be added.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Group environments by policy intent
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Without grouping, every environment is a one-off configuration. As the platform scales, that becomes unmaintainable. Groups let policy intent travel with environments instead of with people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Build groups around policy needs rather than reporting structure: a regulated production group, a pilot group for previews, a routed personal-productivity group, an admin/CoE group. A typical layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Personal Productivity        -&amp;gt; routed per-maker developer envs; sharing disabled
Pilot                        -&amp;gt; experimental AI features on; release channel = Monthly
Production EU                -&amp;gt; AI off for regulated data; release channel = Auto
Production US                -&amp;gt; same policies as EU, separate region
CoE / Admin                  -&amp;gt; governance tooling; locked down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups" rel="noopener noreferrer"&gt;Environment groups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Apply rules at the group level
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; When a rule is published at the group level, the corresponding setting becomes read-only inside each member environment. This makes policy enforceable rather than advisory; per-environment overrides are not supported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the admin center to publish any of the rules currently available (generally available unless noted):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sharing agents with Editor permissions&lt;/li&gt;
&lt;li&gt;Sharing agents with Viewer permissions&lt;/li&gt;
&lt;li&gt;Sharing controls for canvas apps&lt;/li&gt;
&lt;li&gt;Sharing controls for solution-aware cloud flows&lt;/li&gt;
&lt;li&gt;AI-powered Copilot features&lt;/li&gt;
&lt;li&gt;Generative AI settings&lt;/li&gt;
&lt;li&gt;External models&lt;/li&gt;
&lt;li&gt;AI prompts&lt;/li&gt;
&lt;li&gt;Accessing transcripts from conversations in Copilot Studio agents&lt;/li&gt;
&lt;li&gt;Sharing data between Copilot Studio and Viva Insights&lt;/li&gt;
&lt;li&gt;Maker welcome content&lt;/li&gt;
&lt;li&gt;Release channel&lt;/li&gt;
&lt;li&gt;Back-up retention&lt;/li&gt;
&lt;li&gt;Solution checker enforcement&lt;/li&gt;
&lt;li&gt;Unmanaged customizations&lt;/li&gt;
&lt;li&gt;Usage insights&lt;/li&gt;
&lt;li&gt;Power Apps component framework for canvas apps&lt;/li&gt;
&lt;li&gt;Content security policy&lt;/li&gt;
&lt;li&gt;Power Apps code apps&lt;/li&gt;
&lt;li&gt;Preview and experimental AI models&lt;/li&gt;
&lt;li&gt;Default deployment pipeline (preview)&lt;/li&gt;
&lt;li&gt;Advanced connector policy (preview)&lt;/li&gt;
&lt;li&gt;AI-generated descriptions (preview)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups-rules" rel="noopener noreferrer"&gt;Rules for environment groups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Manage group membership from the CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Group membership changes are routine — onboarding new environments, retiring old ones — and should be scriptable. Rule definitions still live in the admin center; the CLI handles membership.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the &lt;code&gt;pac admin&lt;/code&gt; group commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac admin list-groups
pac admin add-group &lt;span class="nt"&gt;--environment&lt;/span&gt; &amp;lt;env-id&amp;gt; &lt;span class="nt"&gt;--environment-group&lt;/span&gt; &amp;lt;group-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/developer/cli/reference/admin" rel="noopener noreferrer"&gt;pac admin reference&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Plan for group removal
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Removing an environment from a group is a half-revert: rule values stay where they were, but the environment becomes editable again locally. Without a manual reconciliation step, the environment can drift in ways that are hard to detect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; When you remove an environment from a group, treat the action as the start of a configuration review. Reconcile every formerly group-managed setting against your current standard before declaring the migration done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/environment-groups" rel="noopener noreferrer"&gt;Environment groups&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.5 Pair groups with default environment routing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Routed personal developer environments multiply quickly. Without grouping, you end up with hundreds of environments each configured independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Auto-route new makers into personal environments, then assign those environments to a &lt;code&gt;Personal Productivity&lt;/code&gt; group with sharing disabled and solution checker enforced. Policies follow membership automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/default-environment-routing" rel="noopener noreferrer"&gt;Default environment routing&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Data Loss Prevention Policies
&lt;/h2&gt;

&lt;p&gt;Data Loss Prevention (DLP) policies in Power Platform control which connectors can be combined inside apps, flows, and agents. Policies apply to Power Apps, Power Automate cloud flows, desktop flows (in Managed Environments), and Copilot Studio agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Sort connectors into three groups
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Data leaks happen when organizational data moves alongside non-organizational connectors in the same resource. The three-group model is how Power Platform prevents that combination at design time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Place each connector into one of three groups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Business&lt;/strong&gt; — connectors that can exchange organizational data with each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-business&lt;/strong&gt; — connectors that can exchange non-organizational data with each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocked&lt;/strong&gt; — connectors that cannot be used at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data cannot flow between Business and Non-business within the same resource.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/wp-data-loss-prevention" rel="noopener noreferrer"&gt;Data policies overview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Set the default group for new connectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Microsoft adds connectors continuously. If new connectors land in a permissive group by default, your DLP posture decays without anyone editing policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Set the &lt;strong&gt;Default group&lt;/strong&gt; to &lt;code&gt;Blocked&lt;/code&gt;. New connectors stay blocked until an admin explicitly classifies them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/create-dlp-policy" rel="noopener noreferrer"&gt;Create a data policy&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Choose the right policy scope
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A tenant-wide policy is the right baseline for high-risk connectors, but environment-specific policies let you allow connectors where they are needed without opening them everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Target a policy at all environments (with optional exclusions), at specific environments, or only at the default environment. Policies aggregate: a connector blocked by &lt;em&gt;any&lt;/em&gt; applicable policy is blocked for that environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/create-dlp-policy" rel="noopener noreferrer"&gt;Create a data policy&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Filter by endpoint
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; A blanket block on &lt;code&gt;HTTP&lt;/code&gt; is often too restrictive. Endpoint filtering keeps the connector available for the URLs you actually need while denying everything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Allow or block specific URLs on HTTP-capable connectors, SQL Server, Azure Blob, and others. This is a premium-tier capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/connector-endpoint-filtering" rel="noopener noreferrer"&gt;Endpoint filtering&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.5 Restrict individual connector actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Many connectors expose both safe (read) and dangerous (arbitrary execute) actions. Action control lets you keep the safe ones while blocking the dangerous ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Allow or block individual actions on a connector — for example, block &lt;code&gt;Execute a SQL query&lt;/code&gt; on SQL Server while allowing table reads. Premium tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/connector-action-control" rel="noopener noreferrer"&gt;Connector action control&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.6 Allow-list custom connector patterns
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Custom connectors are an open door if left ungoverned. Pattern-based allow-listing lets you approve a class of internal endpoints without approving every custom connector individually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Allow-list custom connectors by URL pattern. Pair with a tenant-wide block on unmatched custom connectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/connector-endpoint-filtering" rel="noopener noreferrer"&gt;Connector endpoint filtering&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.7 A high-risk tenant baseline
&lt;/h3&gt;

&lt;p&gt;The example below is a defensible starting point for a tenant where regulated data lives next to general productivity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Business:      Microsoft 365 connectors (Outlook, Teams, SharePoint, OneDrive),
               Dataverse, Approvals, Planner
Non-business:  Bing Search, Translator, MSN Weather
Blocked:       HTTP, HTTP with Microsoft Entra ID (unless endpoint-filtered),
               custom connectors in default env, Twitter/X, Facebook, SMTP, FTP,
               Chat without Microsoft Entra ID authentication in Copilot Studio
Default group: Blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/create-dlp-policy" rel="noopener noreferrer"&gt;Create a data policy&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.8 Manage DLP from PowerShell
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; UI configuration does not survive disaster recovery, audit reproduction, or environment cloning. Scripted policy management does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use the DLP cmdlets to retrieve, create, and modify policies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-DlpPolicy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;New-DlpPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tenant baseline"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# manage connector groups via Set-DlpPolicyDefaultConnectorGroup, Add-ConnectorToBusinessDataGroup, etc.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/powerapps-powershell#data-loss-prevention-dlp-policy-commands" rel="noopener noreferrer"&gt;DLP PowerShell cmdlets&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.9 Understand enforcement timing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Knowing when a policy takes effect is critical during incident response — and during planned changes that you do not want to break in production at noon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Policy changes take effect within minutes for new resources and on the next save or publish for existing ones. Copilot Studio enforces DLP in real time; makers see a validation error immediately when a blocked connector is referenced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/wp-data-loss-prevention" rel="noopener noreferrer"&gt;Data policies overview&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Tenant Isolation and Cross-Tenant Controls
&lt;/h2&gt;

&lt;p&gt;Tenant isolation restricts which external Microsoft Entra ID tenants can be used as the identity source for connections inside your Power Platform tenant. It is a separate control from DLP and from Microsoft Entra B2B. DLP governs &lt;em&gt;which connectors&lt;/em&gt; can be used; tenant isolation governs &lt;em&gt;which tenants users can authenticate to&lt;/em&gt; when creating a connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Distinguish inbound from outbound
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Tenant isolation is directional. Mixing the two leads to either over-blocking (legitimate B2B work breaks) or under-blocking (data exfiltration paths remain).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Configure each direction explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inbound&lt;/strong&gt; — another tenant's users creating a connection that points into your tenant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outbound&lt;/strong&gt; — your tenant's users creating a connection that points into another tenant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/cross-tenant-restrictions" rel="noopener noreferrer"&gt;Tenant isolation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Verify your default — it depends on tenant age
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The default behavior changed in 2026, and assumptions from older guidance no longer apply universally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Tenants created &lt;strong&gt;before 30 March 2026&lt;/strong&gt; have both directions allowed by default; tenant isolation must be enabled explicitly. Tenants created &lt;strong&gt;on or after 30 March 2026&lt;/strong&gt; ship with tenant isolation enabled and both directions defaulting to deny — only allow-listed tenant IDs can be used. Verify the current state in your tenant rather than assuming a default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/cross-tenant-restrictions#enable-tenant-isolation" rel="noopener noreferrer"&gt;Restrict cross-tenant inbound/outbound&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 Configure tenant isolation deliberately
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The control is tenant-wide; there is no per-environment override. A misconfiguration affects the entire tenant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In the Power Platform admin center, under &lt;code&gt;Security &amp;gt; Tenant isolation&lt;/code&gt;, set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tenant isolation: On
Default:          Block
Exceptions:       contoso-partner.onmicrosoft.com  (Inbound, Outbound)
                  fabrikam.onmicrosoft.com          (Outbound only)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/cross-tenant-restrictions" rel="noopener noreferrer"&gt;Tenant isolation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.4 Know what tenant isolation does &lt;em&gt;not&lt;/em&gt; cover
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Tenant isolation is sometimes mistaken for a complete cross-tenant boundary. It is not. Pairing it with the right Entra controls is the only way to close the gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Tenant isolation applies to connectors that authenticate with Microsoft Entra ID (SharePoint, OneDrive, Dataverse, Outlook, Microsoft 365, Azure, etc.). It does not apply to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connectors that use API keys or generic OAuth.&lt;/li&gt;
&lt;li&gt;Service principal and managed identity authentication, which follow Microsoft Entra cross-tenant access policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair tenant isolation with Microsoft Entra cross-tenant access settings for a complete boundary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/cross-tenant-restrictions" rel="noopener noreferrer"&gt;Tenant isolation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.5 Layer Conditional Access
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Tenant isolation controls &lt;em&gt;where&lt;/em&gt; identities can come from; Conditional Access controls &lt;em&gt;under what conditions&lt;/em&gt; identity is accepted. Both layers are needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply Conditional Access policies to the &lt;code&gt;Power Platform API&lt;/code&gt; application to restrict sign-in by user, device, location, and risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/conditional-access" rel="noopener noreferrer"&gt;Conditional Access for Power Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.6 Layer the IP firewall
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Network-level controls reduce the attack surface even when identity controls are intact. They also satisfy auditors who expect defense in depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; The IP firewall (Managed Environments) restricts Dataverse access to declared IP ranges. Configure per environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/ip-firewall" rel="noopener noreferrer"&gt;IP firewall&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.7 Enable continuous access evaluation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Static sign-in evaluation cannot react to changes in identity posture mid-session. CAE narrows the window between an account becoming risky and that account losing access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Continuous access evaluation (CAE) on Dataverse revokes sessions when identity posture changes — for example, when a user is disabled or moves outside an allowed network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/conditional-access" rel="noopener noreferrer"&gt;Conditional Access for Power Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.8 Monitor configuration changes and runtime denials
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Tenant isolation is most useful when its events are visible. Two surfaces matter: configuration changes (someone modifying the policy) and runtime denials (someone hitting the policy).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Tenant isolation events flow to the Power Platform audit log and the Microsoft Purview unified audit log. Configuration changes appear under the &lt;code&gt;TenantIsolationPolicyUpdate&lt;/code&gt; activity; runtime denials surface as connection-creation failures rather than under a single unified filter — review both when investigating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/audit-logs" rel="noopener noreferrer"&gt;Audit logs&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Security Roles and Identity
&lt;/h2&gt;

&lt;p&gt;Power Platform authorization is layered. Microsoft Entra ID provides tenant-level identity and global roles; Dataverse provides row- and column-level security inside each environment; connectors use per-user or service-principal credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Use the right tenant role
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Tenant-scoped governance work does not need Global Administrator. Over-privileged accounts increase blast radius without buying capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Pick from the Microsoft Entra ID roles that govern Power Platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Power Platform Administrator&lt;/strong&gt; — full control of environments, DLP, tenant settings, licenses (within Power Platform scope). Sufficient for almost all governance work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamics 365 Administrator&lt;/strong&gt; — equivalent scope for Dynamics 365 and Dataverse-backed environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Administrator&lt;/strong&gt; — superset; not recommended for day-to-day platform work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fabric Administrator&lt;/strong&gt; — required for Power BI workspace and capacity governance that overlaps Power Platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assign least-privileged roles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/use-service-admin-role-manage-tenant" rel="noopener noreferrer"&gt;Microsoft Entra roles for Power Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Map environment roles to job function
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Environment roles control everything inside an environment, including who can hand out further roles. A misassignment here is hard to roll back without auditing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Inside each environment, the standard roles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Administrator&lt;/strong&gt; — root of the environment; can assign any role.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Customizer&lt;/strong&gt; — schema and solution changes without user management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Maker&lt;/strong&gt; — create apps, flows, agents, and custom connectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic User&lt;/strong&gt; — runtime access to assigned records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delegated Admin&lt;/strong&gt; — scoped admin, granted via Microsoft Entra ID groups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/database-security" rel="noopener noreferrer"&gt;Dataverse security roles&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Build custom roles from a known baseline
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Privileges in Dataverse are granular; granting &lt;code&gt;*&lt;/code&gt; privileges in a custom role is the fastest way to recreate the problems custom roles were supposed to solve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Always start from a copy of an out-of-box role and remove or add the privileges you need at table, action, and column level. Avoid wildcard privileges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/database-security" rel="noopener noreferrer"&gt;Dataverse security roles&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 Prefer teams over individual sharing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Individual record sharing is auditable in theory and unmaintainable in practice. Teams turn membership into access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Use &lt;strong&gt;Owner teams&lt;/strong&gt; or &lt;strong&gt;Access teams&lt;/strong&gt; for direct ownership and sharing. For large memberships, use &lt;strong&gt;Microsoft Entra group teams&lt;/strong&gt; so group membership drives row access automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/manage-group-teams" rel="noopener noreferrer"&gt;Microsoft Entra group teams&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.5 Use service principals for non-interactive work
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Pipelines, integrations, and admin automation should not depend on human accounts. Service principals carry their own lifecycle and credentials, which is what audit and compliance expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Register the app in Microsoft Entra ID, then assign an application user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pac admin create-service-principal &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;--environment&lt;/span&gt; &amp;lt;env-id&amp;gt; &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Pipelines SPN"&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;--role&lt;/span&gt; &lt;span class="s2"&gt;"System Administrator"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rotate secrets and prefer federated credentials or managed identities where supported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/manage-application-users" rel="noopener noreferrer"&gt;Application users&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.6 Apply Conditional Access and MFA
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Identity is the perimeter. Conditional Access and MFA are how that perimeter actually behaves under load — risky logins, anomalous locations, compromised credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Apply Conditional Access to the &lt;code&gt;Power Platform API&lt;/code&gt; app and to &lt;code&gt;Microsoft Dataverse&lt;/code&gt;. Enforce MFA for administrators and for makers who connect to sensitive data sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/conditional-access" rel="noopener noreferrer"&gt;Conditional Access&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Monitoring, Analytics, and Tenant Inventory
&lt;/h2&gt;

&lt;p&gt;Governance without telemetry degrades quickly. Power Platform exposes several monitoring surfaces; the &lt;strong&gt;Inventory&lt;/strong&gt;, &lt;strong&gt;Usage&lt;/strong&gt;, &lt;strong&gt;Monitor&lt;/strong&gt;, and &lt;strong&gt;Actions&lt;/strong&gt; experiences in the Power Platform admin center wrap them into a tenant-wide inventory and alerting layer that Microsoft maintains as a first-party feature. The community &lt;strong&gt;CoE Starter Kit&lt;/strong&gt; filled this role for years but is no longer actively maintained — section 8.6 covers what that transition means in practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Use admin center analytics for per-environment visibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Most operational questions ("is anyone using this app?", "are flow runs failing?") have answers in the admin center. Reaching for the CoE Starter Kit before checking the built-in analytics wastes time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Per-environment charts cover Power Apps usage, Power Automate runs, Dataverse API calls, and Copilot Studio sessions. Tenant-level analytics must be enabled in tenant settings before charts populate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/tenant-level-analytics" rel="noopener noreferrer"&gt;Tenant-level analytics&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Push the weekly digest to a wider audience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; The digest is a high-signal, low-noise summary. Only Power Platform and Dynamics 365 admins receive it by default, which is usually too narrow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Add CoE leads, security reviewers, and operations partners using &lt;code&gt;additionalAdminDigestEmailRecipients&lt;/code&gt; (mechanics in section 3.2).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/managed-environment-usage-insights" rel="noopener noreferrer"&gt;Usage insights (weekly digest)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Stream audit events to Microsoft Purview
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Platform-level actions — DLP changes, environment creations, sharing events — must be reviewable months after they happen. Purview is the long-term store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Power Platform activities flow natively into the Microsoft Purview unified audit log. Search them in the Purview portal, with the &lt;code&gt;Search-UnifiedAuditLog&lt;/code&gt; Exchange Online PowerShell cmdlet, or via the Microsoft 365 Audit API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/manage-dataverse-auditing" rel="noopener noreferrer"&gt;Audit logs and Purview&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/purview/audit-search" rel="noopener noreferrer"&gt;Search the audit log&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Turn on Dataverse auditing per table
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Per-table read and change auditing is the only way to answer record-level forensic questions ("who saw this row?", "what changed and when?"). Without it, the trail stops at the API layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Enable auditing on tables that hold sensitive data. Retention follows the environment's audit retention setting; review it before assuming you have history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/manage-dataverse-auditing" rel="noopener noreferrer"&gt;Audit logs and Purview&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Export to Application Insights
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Built-in analytics is summary-level. Application Insights gives you raw traces for performance and error analysis — the same signal an Azure team would expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; In an environment's settings under &lt;code&gt;Product &amp;gt; Application Insights (preview)&lt;/code&gt;, add the connection string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;InstrumentationKey&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;&lt;/span&gt;
&lt;span class="py"&gt;IngestionEndpoint&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https://westeurope-1.in.applicationinsights.azure.com/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Power Apps emit &lt;code&gt;pageView&lt;/code&gt;, &lt;code&gt;traceEvent&lt;/code&gt;, and error events; model-driven apps add form performance metrics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/admin/app-insights-app-making" rel="noopener noreferrer"&gt;Application Insights for Power Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.6 The CoE Starter Kit and ALM Accelerator — what changed
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why.&lt;/strong&gt; Until recently, the &lt;strong&gt;CoE Starter Kit&lt;/strong&gt; and the &lt;strong&gt;ALM Accelerator for Power Platform&lt;/strong&gt; were the two community-driven kits most enterprise governance setups leaned on — one for inventory and oversight, the other for solution promotion and source control. Native, in-product experiences now supersede both, and following the old guidance without qualification leads new tenants into a maintenance dead end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Two formal status updates to be aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CoE Starter Kit — no longer actively maintained (Microsoft, May 2026).&lt;/strong&gt; The Microsoft Learn page now opens with a clear notice: &lt;em&gt;"The Power Platform CoE Starter Kit is no longer actively maintained. Its core capabilities are part of the Power Platform admin center. Issues are no longer reviewed or addressed."&lt;/em&gt; The kit remains available for existing and new deployments, but it will not receive new features, and GitHub issues are not triaged. Microsoft directs admins to the native admin center experiences instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory&lt;/strong&gt; — view and govern all apps, flows, and agents across the tenant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage&lt;/strong&gt; — track adoption and identify top resources and their owners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; — operational health of heavily used resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actions&lt;/strong&gt; — surface risks, enforce best practices, and act on governance insights.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Beyond the UI, the same data is reachable through the &lt;strong&gt;Power Platform CLI&lt;/strong&gt;, the &lt;strong&gt;Power Platform API&lt;/strong&gt;, the &lt;strong&gt;Power Platform inventory API&lt;/strong&gt;, and the &lt;strong&gt;Power Platform for Admins V2&lt;/strong&gt; connector — which is what to build automation against going forward.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ALM Accelerator for Power Platform — formally deprecated (Microsoft Learn page last updated 2024-04-24).&lt;/strong&gt; Microsoft's overview page is now titled &lt;em&gt;"ALM Accelerator for Power Platform (Deprecated)"&lt;/em&gt; and carries this notice: &lt;em&gt;"The ALM Accelerator is deprecated and will be removed in a future release. Use Pipelines in Power Platform to bring ALM automation capabilities to Power Platform and Dynamics 365 services. Pipelines can be used with source code integration or extended to integrate with other providers."&lt;/em&gt; The accelerator was a canvas-app-plus-Azure-Pipelines reference implementation; the strategic replacement is the in-product &lt;strong&gt;Power Platform Pipelines&lt;/strong&gt; experience (introduced in section 3.5 and detailed in part 2). The accelerator continues to function for now, but no new investment is being made in it, and it is on track to be removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical recommendation.&lt;/strong&gt; If you already run either kit, keep operating it — neither is being switched off tomorrow — but stop building new dependencies on top of it. For inventory, attestation, and orphaned-asset detection, build against the admin center experiences and the inventory API. For ALM, route new solutions through Power Platform Pipelines and plan a migration off the ALM Accelerator to avoid being caught out when a removal date is announced. Tenants starting from scratch in 2026 should skip both kits and build directly on the in-product surfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/power-platform/guidance/coe/starter-kit" rel="noopener noreferrer"&gt;CoE Starter Kit transition to Power Platform admin center&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/guidance/alm-accelerator/overview" rel="noopener noreferrer"&gt;ALM Accelerator for Power Platform (Deprecated)&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/alm/pipelines" rel="noopener noreferrer"&gt;Power Platform Pipelines&lt;/a&gt;, &lt;a href="https://learn.microsoft.com/power-platform/admin/programmability-authentication-v2" rel="noopener noreferrer"&gt;Power Platform inventory API&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.7 Forward to Microsoft Sentinel
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; SOCs want one queue. Forwarding Power Platform signals to Sentinel places platform incidents alongside other security telemetry, rather than in a separate, unmonitored location.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How.&lt;/strong&gt; Forward the Power Platform activity log and Purview audit events to Sentinel via the &lt;code&gt;Microsoft Power Platform administrative logs&lt;/code&gt; data connector. Pre-built analytic rules cover suspicious DLP changes, mass app sharing, and unauthenticated agent publishing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more.&lt;/strong&gt; &lt;a href="https://learn.microsoft.com/azure/sentinel/data-connectors/microsoft-power-platform" rel="noopener noreferrer"&gt;Sentinel connector&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Outlook: what part 2 covers
&lt;/h2&gt;

&lt;p&gt;Part 1 has established the platform-level perimeter — the environments themselves, the policies that bind them, the identities that reach them, and the telemetry that watches them. None of those controls answers the question of what gets &lt;em&gt;built&lt;/em&gt; inside that perimeter, or how that work moves from a maker's hands into production. That is the territory of part 2.&lt;/p&gt;

&lt;p&gt;Next week's article picks up where this one ends and walks through six topics in the same Why → How → Learn more pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governing Microsoft Copilot Studio.&lt;/strong&gt; Tenant- and environment-level controls for AI agents, including who can publish, what AI features are allowed where, how knowledge sources are scoped, and how transcripts are retained.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent authentication and connector governance.&lt;/strong&gt; The three authentication modes, the Entra Agent ID model that replaces stored client secrets, the connectors that should be blocked in regulated tenants, and the action-level controls that turn dangerous connectors into safe-but-useful ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Lifecycle Management and pipelines.&lt;/strong&gt; Solutions as the unit of deployment, environment variables and connection references, Power Platform Pipelines as the native promotion path (and the strategic replacement for the now-deprecated ALM Accelerator for Power Platform), and when to fall back to Azure DevOps or GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution checker and quality gates.&lt;/strong&gt; Static analysis for apps, flows, and agents; how to enforce it at solution import; how to read SARIF output; and how agent evaluations complement structural checks with behavioral ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensing and capacity governance.&lt;/strong&gt; Power Apps and Power Automate license models, Dataverse capacity allocation, the Copilot Credits consumption model and its gotchas, and how to keep license assignment in sync with employment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change management and release rings.&lt;/strong&gt; The two release channels that actually exist for Power Platform (Auto and Monthly — there is no Semi-Annual), how to gate previews per environment group, in-tenant change categories, administration mode, manual backups, and rollback realities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you treat part 1 as the platform on which everything stands, part 2 is everything that runs on that platform. The two are designed to be read together: the controls in part 1 matter only because they shape the work covered in part 2, and the controls in part 2 stick only because the foundations in part 1 hold them up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion (Part 1)
&lt;/h2&gt;

&lt;p&gt;Platform-level governance is the foundation of everything else. It is the cumulative result of many small, well-placed controls working together: an environment topology that matches how the organization actually builds, a default environment treated as a perimeter rather than a playground, Managed Environments and environment groups that make policy enforceable at scale, DLP and tenant isolation that bound where data can move, identity and Conditional Access that decide who is allowed to touch the platform at all, and monitoring that turns activity into evidence.&lt;/p&gt;

&lt;p&gt;The controls described in this article already exist on the platform. None of them requires custom engineering, third-party tooling, or preview access to be useful. What they require is decision-making: which environments belong in which group, which connectors are business versus non-business, which tenants are trusted for cross-tenant connections, and who has the right to administer what. Those decisions &lt;em&gt;are&lt;/em&gt; the platform half of governance.&lt;/p&gt;

&lt;p&gt;Start small and iterate. A minimum viable foundation is: restrict default environment creation, attach a tenant-wide baseline DLP policy, enable default environment routing with a Managed Environments group, turn on tenant-level analytics, lean on the Power Platform admin center's &lt;strong&gt;Inventory&lt;/strong&gt;, &lt;strong&gt;Usage&lt;/strong&gt;, &lt;strong&gt;Monitor&lt;/strong&gt;, and &lt;strong&gt;Actions&lt;/strong&gt; experiences (the CoE Starter Kit is no longer actively maintained — see section 8.6), and verify your tenant isolation defaults. Everything in part 1 is a refinement on that minimum viable foundation; everything in part 2 will be a refinement on top of part 1.&lt;/p&gt;

&lt;p&gt;Read on next week for the second half — agents, ALM, licensing, and change management — and a closing recap that ties both articles together.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>powerplatform</category>
      <category>governance</category>
    </item>
    <item>
      <title>Microsoft Agent 365: The Control Plane for AI Agents Is Now Generally Available</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/holgerimbery/microsoft-agent-365-the-control-plane-for-ai-agents-is-now-generally-available-ggi</link>
      <guid>https://dev.to/holgerimbery/microsoft-agent-365-the-control-plane-for-ai-agents-is-now-generally-available-ggi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
On 1 May 2026, Microsoft moved &lt;strong&gt;Agent 365&lt;/strong&gt; from preview into &lt;strong&gt;general availability&lt;/strong&gt; , positioning it as the control plane that organizations need in order to &lt;strong&gt;observe, govern, and secure&lt;/strong&gt; the rapidly growing population of AI agents working across their tenants. The service is licensed at &lt;strong&gt;fifteen US dollars per user per month&lt;/strong&gt; as a standalone add-on, or as a component of the new &lt;strong&gt;Microsoft 365 E7&lt;/strong&gt; suite, and it integrates directly with the security and compliance products that most enterprises already operate, including &lt;strong&gt;Microsoft Entra&lt;/strong&gt; , &lt;strong&gt;Microsoft Purview&lt;/strong&gt; , and &lt;strong&gt;Microsoft Defender&lt;/strong&gt;. Rather than introducing yet another place to build agents, Agent 365 sits above existing platforms and consolidates operational disciplines that have, until now, been distributed across many disconnected tools and dashboards.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why read this:&lt;/strong&gt; If your organization has begun deploying AI agents — whether built in Copilot Studio, embedded in third-party SaaS, developed in Microsoft Foundry, or installed by users on their own devices — you are facing a governance question that did not exist eighteen months ago. This article explains what Agent 365 actually is, what it changes in the operating model of an organization that has already invested in Microsoft 365 Copilot, and how to take the first practical steps after acquiring a license. It is intended to bring the moving parts into a single, coherent narrative you can use when you brief stakeholders, plan a pilot, or write your internal adoption proposal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction: Why a Control Plane for Agents Is Now a Necessity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI agents are no longer a category of pilot project owned by a single innovation team.&lt;/strong&gt; They are appearing inside Word, Excel, PowerPoint, Outlook, Teams, partner SaaS portals, custom-built applications, and, increasingly, on the local workstations of individual employees who have installed AI assistants on their own initiative. According to figures Microsoft cites from IDC, the worldwide population of AI agents is expected to reach approximately &lt;strong&gt;1.3 billion by 2028&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Even at a small fraction of that figure, the implications for an enterprise tenant are significant. The questions IT leaders are being asked have outpaced the tools available to answer them: &lt;em&gt;Which agents are running in our tenant today? Who owns each one? What data does each one touch, and on whose authority? Is it behaving as expected? If it has been compromised, when, by whom, and how would we know?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Microsoft now refers to this phenomenon openly as &lt;strong&gt;agent sprawl&lt;/strong&gt; , and a newer category — the so-called &lt;strong&gt;shadow agent&lt;/strong&gt; , meaning a local AI assistant installed on an endpoint without IT approval — has begun to appear on enterprise risk registers because it represents an identity-less, policy-less, telemetry-less actor with access to the same documents and chats as its human user. A control plane is the established architectural answer to this class of problem, and &lt;strong&gt;Agent 365 is, very deliberately, that control plane&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Microsoft Agent 365 Actually Is
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agent 365 is a tenant-level service that gives administrators a single, authoritative view of every AI agent operating in the organization, together with the policy, identity, and security mechanisms required to manage them at scale.&lt;/strong&gt; Microsoft summarizes its purpose using three verbs that recur throughout the official documentation: &lt;strong&gt;observe, govern, and secure&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To &lt;strong&gt;observe&lt;/strong&gt; means that administrators have real-time visibility into the agents in their environment, what those agents are doing, and how they are performing.&lt;/li&gt;
&lt;li&gt;To &lt;strong&gt;govern&lt;/strong&gt; means that the lifecycle of each agent — from registration, through approval and assignment, to retirement — is controlled through consistent policies rather than ad-hoc decisions.&lt;/li&gt;
&lt;li&gt;To &lt;strong&gt;secure&lt;/strong&gt; means that the same enterprise-grade identity, data protection, and threat detection that already apply to users are extended, faithfully, to agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The service is built around five capabilities that Microsoft consistently identifies as the pillars of the offering:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;Role in the control plane&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Registry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A unified inventory of every agent in the organization — including those issued an Entra Agent ID, those published in the Microsoft Teams or Agent Store, and shadow agents discovered on endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Access Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unique &lt;strong&gt;Entra Agent ID&lt;/strong&gt; for every agent, with policy templates and adaptive, risk-based access decisions enforced by Microsoft Entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visualization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Telemetry, dashboards, role-based reports for IT, security, and business audiences, plus an &lt;strong&gt;Agent Map&lt;/strong&gt; of relationships between agents, users, and resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Governs agents built with Microsoft tools, with open-source frameworks, and with ecosystem partner platforms; agents can use the same Microsoft 365 context that users do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Integration with &lt;strong&gt;Microsoft Defender&lt;/strong&gt; , &lt;strong&gt;Microsoft Entra&lt;/strong&gt; , and &lt;strong&gt;Microsoft Purview&lt;/strong&gt; for threat detection, identity protection, data loss prevention, and compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It is also worth being precise about what Agent 365 is &lt;em&gt;not&lt;/em&gt;. &lt;strong&gt;It is not a new platform for building agents.&lt;/strong&gt; Copilot Studio, Microsoft Foundry, and external frameworks remain the places where agents are designed, configured, and developed. Agent 365 is the layer above those platforms — the layer that ensures whatever you build, or whatever a partner ships into your tenant, becomes a managed, identified, observed, and governable entity within your organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Pillars in Greater Detail
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Registry
&lt;/h3&gt;

&lt;p&gt;The Registry is, in many respects, the foundational capability, because every other discipline depends on having an authoritative inventory. Through the Registry, administrators see a unified list of agents that includes those issued an Entra Agent ID, those published in the Microsoft Teams Store or the Agent Store, and — as discovery functionality continues to roll out — shadow agents detected on managed Windows endpoints by Microsoft Defender and Microsoft Intune. From the Registry, administrators can install agents for selected audiences, block or unblock them across the organization, assign or reassign owners, publish requested agents to the store, reject submissions, or delete agents and their associated files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Access Control through Entra Agent ID
&lt;/h3&gt;

&lt;p&gt;Each agent is given a unique identity, the &lt;strong&gt;Entra Agent ID&lt;/strong&gt; , which enables agents to be governed in the same identity-centric manner as human users. Administrators can apply &lt;strong&gt;policy templates&lt;/strong&gt; that encode standard guardrails on day one, and Microsoft Entra enforces adaptive, risk-based access decisions that respond to real-time context, blocking agents that show signs of compromise from reaching organizational resources. The principle of least privilege, long established for human accounts and service principals, is now available in operation for agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualization
&lt;/h3&gt;

&lt;p&gt;The visualization layer goes beyond conventional dashboards. In addition to Telemetry, alerts, and role-based reports tailored separately to IT, security, and business audiences, Agent 365 provides an &lt;strong&gt;Agent Map&lt;/strong&gt; that displays the relationships between agents, the users on whose behalf they act, and the resources they connect to. This is particularly valuable for spotting unintended data flows or excessive privilege. Microsoft also references &lt;strong&gt;built-in performance measurement&lt;/strong&gt; to help decision-makers assess return on investment. However, the granularity of those metrics will, in practice, depend on the specific agents and host applications involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interoperability
&lt;/h3&gt;

&lt;p&gt;The interoperability story is significant because it acknowledges that agents in a real enterprise are not all built on the same platform. Agent 365 governs agents created with Microsoft tools, with open-source frameworks, and with &lt;strong&gt;ecosystem partner platforms&lt;/strong&gt; , with pre-integrated partner agents available to deploy directly from the Microsoft 365 admin center at general availability. Agents can access the same Microsoft 365 context that users do — Teams, calendars, mailboxes, SharePoint — and Microsoft has highlighted unified SDKs and consistent &lt;strong&gt;Model Context Protocol (MCP) interfaces&lt;/strong&gt; for developers building agentic tools across Outlook, Teams, and SharePoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;The security pillar is delivered through tight integration with the existing Microsoft security stack rather than through a parallel set of agent-specific tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Purview&lt;/strong&gt; brings information protection, data loss prevention, sensitivity labels, eDiscovery, Insider Risk Management, and the data security posture management capability for AI (often referred to as DSPM for AI) into scope for agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Defender XDR&lt;/strong&gt; contributes agent inventory, real-time runtime protection, threat hunting, and security posture management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Entra&lt;/strong&gt; contributes adaptive access enforcement and, as announced at RSAC 2026, network-level prompt-injection protection and explicit shadow-AI detection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cumulative effect is that agents become first-class citizens of your existing security operations rather than exceptions that need to be handled separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changes Operationally with Agent 365
&lt;/h2&gt;

&lt;p&gt;For organizations that have been running Microsoft 365 Copilot for some time, the introduction of Agent 365 changes several aspects of day-to-day operations in concrete ways:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Before Agent 365&lt;/th&gt;
&lt;th&gt;With Agent 365&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents represented by shared service accounts or app registrations&lt;/td&gt;
&lt;td&gt;Every agent receives a unique &lt;strong&gt;Entra Agent ID&lt;/strong&gt; and is governed individually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scattered across Teams Store, Copilot Studio, partner portals&lt;/td&gt;
&lt;td&gt;Single &lt;strong&gt;Agent Registry&lt;/strong&gt; view in the Microsoft 365 admin center&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Access control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per-agent manual permission grants&lt;/td&gt;
&lt;td&gt;Policy-template-driven, adaptive, risk-based enforcement through Microsoft Entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vendor-specific dashboards&lt;/td&gt;
&lt;td&gt;Unified telemetry, role-based reports, and an &lt;strong&gt;Agent Map&lt;/strong&gt; of relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security and compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reaching into agent behaviour required significant effort&lt;/td&gt;
&lt;td&gt;Native coverage through the same &lt;strong&gt;Defender&lt;/strong&gt; , &lt;strong&gt;Entra&lt;/strong&gt; , and &lt;strong&gt;Purview&lt;/strong&gt; controls used today&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The new shadow-AI dimension is also worth highlighting. Until now, an unsanctioned local AI assistant on an employee’s laptop has been more or less invisible to IT. With Agent 365, Defender, and Intune, surface those agents in the Registry so administrators can quarantine them, block them from accessing organizational resources, or, where appropriate, formally onboard them under policy. This is one of the more visibly novel capabilities of the GA release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Licensing and Availability
&lt;/h2&gt;

&lt;p&gt;Microsoft Agent 365 is licensed on a &lt;strong&gt;per-user basis&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standalone price:&lt;/strong&gt; fifteen US dollars per user per month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundled option:&lt;/strong&gt; included in the new &lt;strong&gt;Microsoft 365 E7&lt;/strong&gt; suite, which combines Microsoft 365 E5, Microsoft 365 Copilot, the Microsoft Entra Suite, and Agent 365 into a single offering aimed at enterprises that want to standardize on a fully integrated identity, productivity, and agent-governance platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability segment:&lt;/strong&gt; Commercial cloud at general availability. Microsoft’s documentation also notes that &lt;strong&gt;Microsoft 365 for Government Community Cloud High and Government Community Cloud Moderate&lt;/strong&gt; environments support agent publishing scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no strict product prerequisites to enable Agent 365. Still, Microsoft recommends that customers hold &lt;strong&gt;Microsoft Entra P1, Entra P2, or the Entra Suite&lt;/strong&gt; , alongside &lt;strong&gt;Microsoft Purview Data Loss Prevention&lt;/strong&gt; , to make full use of the governance and security benefits. A Microsoft 365 Copilot license remains necessary to use Copilot-based agents. Pricing details should always be validated with your account team, since regional adjustments, channel offers, and bundle economics can materially change the total cost of ownership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking Your First Steps After Acquiring a License
&lt;/h2&gt;

&lt;p&gt;One of the most pragmatic aspects of Agent 365 is that &lt;strong&gt;there is no infrastructure to deploy&lt;/strong&gt;. The service is activated via licensing and configured in the Microsoft 365 admin center, so the initial steps are administrative rather than technical. The following sequence reflects the recommended path from the Microsoft Learn documentation, organized as most teams will execute it in practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Confirm Roles and Licenses
&lt;/h3&gt;

&lt;p&gt;Begin by ensuring that the right people hold the right roles. Please assign the &lt;strong&gt;Global Administrator&lt;/strong&gt; role and any other agent-administration roles required for your organization, in line with your least-privilege practices. At the same time, confirm that the audiences for which you intend to enable agents have appropriate licenses in place — Microsoft 365 Copilot in particular, but also any Entra and Purview SKUs that you plan to rely on for governance and protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Open the Agents Area in the Microsoft 365 Admin Center
&lt;/h3&gt;

&lt;p&gt;Sign in to the &lt;strong&gt;Microsoft 365 admin center&lt;/strong&gt; , expand &lt;strong&gt;… Show all&lt;/strong&gt; in the left navigation, select &lt;strong&gt;Agents&lt;/strong&gt; , and open &lt;strong&gt;All agents&lt;/strong&gt;. This view, with &lt;strong&gt;Registry&lt;/strong&gt; selected, is the canonical inventory of every agent known in your tenant. It is worth spending time here before making any operational decisions; many organizations are surprised by what already exists in their environment once it is presented in a single list.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Establish a Baseline Policy
&lt;/h3&gt;

&lt;p&gt;Before approving anything broadly, define and apply an &lt;strong&gt;Agent Policy Template&lt;/strong&gt; that captures your organization’s standards. The template determines, among other things, which connectors and data sources agents may use, what sensitivity-label boundaries apply, and which Conditional Access conditions Entra should enforce. Treat this template as a living governance artifact, deliberately version it, and review it with your security and data-protection stakeholders before it becomes the default for new approvals.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Activate or Install Your First Agent
&lt;/h3&gt;

&lt;p&gt;To install an agent for users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the agent from the Registry list.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Install&lt;/strong&gt; in the agent details pane.&lt;/li&gt;
&lt;li&gt;Decide whether the deployment scope should be the entire organization or specific users and groups, and select &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Review the requested permissions, and select &lt;strong&gt;Grant admin consent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Accept the requested permissions, and select &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Finish deployment&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent will subsequently appear in the relevant host product — Copilot, Teams, Outlook, or another Microsoft 365 surface — for the chosen audience.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Process Activation and Approval Requests
&lt;/h3&gt;

&lt;p&gt;End users can request agents from the Microsoft Teams Store or the Agent Store, and those requests surface to administrators for review. Each request can be approved and activated, or rejected with a rationale. From a governance perspective, formally approving or rejecting requests is at least as important as installing approved agents, because it creates the decision trail that auditors and risk reviewers will look for in 12 months.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Turn On Observability and Security
&lt;/h3&gt;

&lt;p&gt;The full value of Agent 365 only emerges when its companion services are correctly configured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Microsoft Purview&lt;/strong&gt; , enable the data security posture management capability for AI, configure DLP policies that include agent identities, and bring agent interactions into your retention and eDiscovery scope.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Microsoft Defender XDR&lt;/strong&gt; , review the agent inventory, switch on real-time runtime protection for agents, and integrate agent telemetry into your existing threat-hunting workflows.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Microsoft Entra&lt;/strong&gt; , define the adaptive access policies that should apply to agent identities, and decide explicitly whether and how external parties may interact with your agents — by default, agents behave as internal identities and external access is constrained by administrative policy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Use the Agent Map to Validate Reality Against Intent
&lt;/h3&gt;

&lt;p&gt;Once a small number of agents are running under the new policies, open the &lt;strong&gt;Agent Map&lt;/strong&gt; to inspect the relationships between agents, users, and data sources. This is the single most effective way to detect unintended privilege, unexpected agent-to-agent connections, or data flows that violate your sensitivity-label model. The Map is intended to make excessive privilege visually obvious, and it should become a regular part of your operational review cadence.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Maintain Lifecycle Hygiene
&lt;/h3&gt;

&lt;p&gt;Agent 365 supports a comprehensive set of lifecycle actions through the Microsoft 365 admin center, including &lt;strong&gt;install, uninstall, block, unblock, assign a new owner, publish to the store, reject a submission, and delete&lt;/strong&gt;. Schedule a recurring review — quarterly is a reasonable starting point — to identify orphaned, unused, or stale agents and retire them deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Guidance for a Successful Rollout
&lt;/h2&gt;

&lt;p&gt;A few principles consistently distinguish successful rollouts from those that struggle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Begin with discovery rather than deployment.&lt;/strong&gt; The first weeks should be spent observing what already exists in your tenant before approving anything new, because the inventory you uncover will materially shape your governance design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Please assign an Agent Owner to each agent&lt;/strong&gt;. Agents without accountable human owners tend, over time, to drift outside policy. Make ownership explicit at registration and revisit it quarterly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Treat the initial Agent 365 program as a security and compliance project at least as much as a productivity project.&lt;/strong&gt; The most defensible early wins are reducing shadow-AI exposure and producing a credible audit trail. Productivity outcomes follow naturally once stakeholders trust the guardrails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Be honest about the operational overhead.&lt;/strong&gt; A control plane only delivers value if someone is operating it. Plan for a small but explicit team responsible for policy templates, request triage, agent reviews, and lifecycle hygiene, and make sure that the team has the authority to say no when an agent does not meet your standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Evaluate the Microsoft 365 E7 bundle carefully&lt;/strong&gt; if you are already an E5 customer. The bundle economics can become attractive once Microsoft 365 Copilot, the Entra Suite, and Agent 365 are all in scope. Still, the decision should be evaluated through a deliberate commercial analysis rather than a reflex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats and What to Watch
&lt;/h2&gt;

&lt;p&gt;Several aspects of the service deserve a measured note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shadow-agent detection&lt;/strong&gt; is described in Microsoft’s announcement materials as a capability that will continue to expand over time, which suggests that initial coverage will improve as the service matures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance and ROI metrics&lt;/strong&gt; are real. Still, their granularity in any given environment will depend on the specific agents and host applications you operate, so it is wise to validate them against your own reporting needs early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end value depends on companion services.&lt;/strong&gt; Because Agent 365 spans several Microsoft products, the value you obtain will depend on how thoroughly Entra, Purview, and Defender are configured in your tenant — partial deployments will yield partial value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: A Single, Coherent Place to Govern Agents
&lt;/h2&gt;

&lt;p&gt;The general availability of Microsoft Agent 365 is a significant milestone, less because it introduces dramatic new capabilities than because it &lt;strong&gt;consolidates a set of operational disciplines that enterprises have urgently needed&lt;/strong&gt;. Organizations have been building, buying, and deploying AI agents for some time. The absence of a unified control plane has become increasingly difficult to defend against in front of security committees, auditors, and regulators. Agent 365 closes that gap by extending the same identity, governance, and security model that already underpins your users to the agents that increasingly act alongside them.&lt;/p&gt;

&lt;p&gt;For most Microsoft 365 customers, the practical implication is straightforward. The infrastructure question is settled, the licensing path is clear, the integration with the existing Entra, Purview, and Defender stack is real, and the first steps are administrative rather than technical. What remains is the work that always determines the success of a governance program: &lt;strong&gt;defining sensible policy, assigning accountable owners, observing what is happening in your tenant, and acting on what you learn&lt;/strong&gt;. Agent 365 will not do that work for you, but it now provides — for the first time — a single, coherent place in which to do it.&lt;/p&gt;

&lt;p&gt;If you are considering when to begin, the answer is almost certainly now. &lt;em&gt;The agents are already there. The control plane is finally here.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Official Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Learn — &lt;em&gt;Microsoft Agent 365 overview&lt;/em&gt; (&lt;a href="https://learn.microsoft.com/en-us/microsoft-agent-365/overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/microsoft-agent-365/overview&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;em&gt;Get started with Microsoft Agent 365&lt;/em&gt; (&lt;a href="https://learn.microsoft.com/en-us/microsoft-agent-365/get-started" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/microsoft-agent-365/get-started&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Microsoft Learn — &lt;em&gt;Governance and Lifecycle actions for agents available in Microsoft 365 admin center&lt;/em&gt; (&lt;a href="https://learn.microsoft.com/en-us/microsoft-365/admin/manage/agent-actions" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/microsoft-365/admin/manage/agent-actions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Microsoft 365 Blog — &lt;em&gt;Microsoft Agent 365: The control plane for AI agents&lt;/em&gt; (Charles Lamanna, Executive Vice President, Business Applications &amp;amp; Agents, November 2025) (&lt;a href="https://www.microsoft.com/en-us/microsoft-365/blog/2025/11/18/microsoft-agent-365-the-control-plane-for-ai-agents/" rel="noopener noreferrer"&gt;https://www.microsoft.com/en-us/microsoft-365/blog/2025/11/18/microsoft-agent-365-the-control-plane-for-ai-agents/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Microsoft — &lt;em&gt;Microsoft Agent 365: The Control Plane for Agents&lt;/em&gt; (product page, &lt;a href="https://www.microsoft.com/en-us/microsoft-agent-365" rel="noopener noreferrer"&gt;https://www.microsoft.com/en-us/microsoft-agent-365&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Microsoft Copilot Acceleration Team — &lt;em&gt;Microsoft Agent 365 Resources&lt;/em&gt; (&lt;a href="https://microsoft.github.io/agent-resources/agent365/" rel="noopener noreferrer"&gt;https://microsoft.github.io/agent-resources/agent365/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agent365</category>
      <category>githubcopilot</category>
      <category>entra</category>
      <category>purview</category>
    </item>
    <item>
      <title>Copilot Studio Billing – A Short Answer to a Frequent Question</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 02 May 2026 08:04:40 +0000</pubDate>
      <link>https://dev.to/holgerimbery/copilot-studio-billing-a-short-answer-to-a-frequent-question-50n5</link>
      <guid>https://dev.to/holgerimbery/copilot-studio-billing-a-short-answer-to-a-frequent-question-50n5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Organizations implementing Microsoft Copilot Studio often ask about the machine structure and how to monitor and analyze resource use across their deployed agents. This article addresses these common questions by examining the foundational principles of Copilot Studio's billing methodology. Specifically, the platform employs a usage-based billing model that operates through Copilot Credits, a standardized measurement unit that quantifies billable computational resources. Microsoft Copilot Studio gives you comprehensive visibility into consumption and costs through integrated Analytics. You get real-time visibility into billing metrics, consumption attribution, and capacity planning, without needing external tools or manual reconciliation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage-based billing with Copilot Credits
&lt;/h2&gt;

&lt;p&gt;Microsoft Copilot Studio employs a consumption-based billing model centered on Copilot Credits, a standardized unit of measurement that quantifies the billable computational resources your agent uses. We add up each agent's operational costs by summing all Copilot Credits used across your organizational tenant, providing a transparent, predictable billing framework. The volume of Copilot Credits your agent consumes is determined by multiple contributing factors, including the frequency and intensity of user interactions, the specific AI capabilities invoked during those interactions (such as natural language responses, backend action execution, or business process flows), and the overall complexity of the scenarios the agent must handle. This approach lets your costs scale with your actual usage and feature use across your organization. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where to see billing and consumption
&lt;/h2&gt;

&lt;p&gt;Copilot Studio provides a dedicated Analytics page at the agent level that shows billing‑relevant data for a selected time period. This includes:&lt;/p&gt;

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

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

&lt;h3&gt;
  
  
  Total billed Copilot Credits for the agent
&lt;/h3&gt;

&lt;p&gt;The Analytics dashboard provides comprehensive visibility into your agent's billing metrics through several key components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Billing trend visualization&lt;/strong&gt;: A temporal representation of Copilot Credit consumption plotted over your selected time period, enabling stakeholders to identify consumption patterns, peak usage intervals, and seasonal fluctuations in agent utilization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Activity-based consumption breakdown&lt;/strong&gt;: A detailed attribution analysis that segments credit consumption by interaction type and feature category. This granular view helps identify which capabilities—such as natural language processing, action executions, or business process integrations—are the primary drivers of your organization's computational costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Credit allocation and remaining capacity&lt;/strong&gt;: A dashboard element that displays your monthly credit allocation alongside actual consumption to date, providing clear visibility into remaining available credits within the current billing cycle and helping prevent unexpected cost overruns.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This analytical approach helps makers and administrators go beyond simple cost visibility to understand the factors and user behaviors that drive consumption patterns in their agents. &lt;/p&gt;

&lt;h3&gt;
  
  
  Near‑real‑time visibility
&lt;/h3&gt;

&lt;p&gt;Please note that consumption data in the Analytics experience isn't reflected immediately. Because data collection and aggregation are distributed across Microsoft's infrastructure, there is a deliberate processing interval between when an interaction occurs in your agent and when the corresponding credit consumption metrics appear in the Analytics dashboard. Specifically, recent user activity and associated Copilot Credit charges typically require several hours to propagate through the telemetry pipeline and surface in the analytics interface. This temporal lag between actual consumption and reported metrics is a critical consideration when conducting performance monitoring, particularly in scenarios involving new agent deployments, recent architectural modifications, or optimization initiatives. Organizations implementing consumption tracking during these periods should account for this delay when interpreting analytics data and making operational decisions based on observed billing trends. &lt;/p&gt;

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

&lt;p&gt;The relationship between billing metrics and agent design decisions is a core principle in building and running Microsoft Copilot Studio deployments. Organizations that recognize and leverage this connection are better positioned to make informed architectural decisions that balance functional requirements with cost efficiency. The Analytics experience provided within Copilot Studio serves a dual purpose that extends well beyond simple billing transparency. As a primary governance tool, it enables organizations to establish consumption baselines, define and enforce cost budgets, and implement optimization strategies at both the agent and organizational levels. This comprehensive analytical framework becomes increasingly critical as agents transition from the experimentation and proof-of-concept phases to production environments, where operational costs accumulate rapidly, and optimization opportunities become more constrained. By establishing clear visibility into consumption patterns during early development stages, teams can identify inefficient architectural patterns, optimize interaction flows, and refine AI capabilities—all before deploying agents at scale. Furthermore, the transparency provided by the Analytics dashboard facilitates organizational governance by empowering stakeholders to establish accountability for resource utilization, track consumption trends against budgetary targets, and make data-driven decisions regarding agent expansion, feature prioritization, and technology investments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links and resources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/requirements-messages-management?source=recommendations" rel="noopener noreferrer"&gt;billing rates&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Microsoft Copilot Studio's billing model, centered on usage-based Copilot Credits, provides a transparent and scalable framework for managing the costs associated with AI agent deployment. By leveraging the built-in Analytics experience, organizations can gain comprehensive insights into their agents' consumption patterns, enabling informed decision-making around agent design, optimization, and cost management. As organizations continue to adopt and scale their use of AI agents, understanding the nuances of billing and consumption visibility will be essential for maximizing the value of their investments in Microsoft Copilot Studio while maintaining control over operational costs.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>agents</category>
    </item>
    <item>
      <title>Microsoft IQ: The New Intelligence Layer for Enterprise AI Agents</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 25 Apr 2026 08:42:12 +0000</pubDate>
      <link>https://dev.to/holgerimbery/microsoft-iq-the-new-intelligence-layer-for-enterprise-ai-agents-281b</link>
      <guid>https://dev.to/holgerimbery/microsoft-iq-the-new-intelligence-layer-for-enterprise-ai-agents-281b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Microsoft's new IQ layers - &lt;strong&gt;Work IQ&lt;/strong&gt;, &lt;strong&gt;Fabric IQ&lt;/strong&gt;, and &lt;strong&gt;Foundry IQ&lt;/strong&gt; - are unified intelligence systems that give enterprise AI agents deep organizational context. Rather than relying solely on general knowledge, these layers ground agents in your company's real data, workflows, and knowledge domains, enabling them to make decisions with the credibility and awareness of experienced employees.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why read this:&lt;/strong&gt; If you're building or deploying AI agents in enterprise environments, understanding these three intelligence layers is essential. Learn what each layer does, the business value they unlock, practical developer integration steps with Copilot Studio, and real limitations to watch for - whether you're looking to protect your competitive edge or avoid common deployment pitfalls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction: Why Enterprise Context Is the New AI Differentiator
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI agents - autonomous systems that plan, reason, and act on behalf of users - are moving from experimentation to production at enterprise scale.&lt;/strong&gt; A July 2024 Capgemini survey of 1,100 companies with over \$1 billion in annual revenue found that &lt;strong&gt;82% plan to integrate AI agents within the next one to three years&lt;/strong&gt;, with only 7% reporting no plans at all Of those surveyed, 71% expect AI agents to drive automation, and 64% expect them to free human workers from repetitive tasks so they can focus on higher-value functions. Separately, KPMG's Q2 2025 AI Quarterly Pulse Survey of 130 U.S.-based C-suite leaders (from organizations with \$1 billion or more in revenue) reports that &lt;strong&gt;33% of organizations have now deployed at least some agents - a three-fold increase after two consecutive quarters at 11%&lt;/strong&gt;. The same survey found that &lt;strong&gt;82% of leaders agree their industry's competitive landscape will look fundamentally different within 24 months&lt;/strong&gt; due to AI.&lt;/p&gt;

&lt;p&gt;Yet deploying powerful language models alone does not guarantee business impact. Large language models ship with broad general knowledge but lack awareness of an organization's current data, internal processes, contractual obligations, and human workflow patterns. The real differentiator is no longer &lt;em&gt;how smart the model is&lt;/em&gt;, but &lt;strong&gt;how well it understands your organization&lt;/strong&gt;. At &lt;strong&gt;Microsoft Ignite 2025&lt;/strong&gt;, Microsoft addressed this gap by introducing a &lt;strong&gt;"Unified Context Layer"&lt;/strong&gt; comprising three tightly connected intelligence systems: &lt;strong&gt;Work IQ&lt;/strong&gt;, &lt;strong&gt;Fabric IQ&lt;/strong&gt;, and &lt;strong&gt;Foundry IQ&lt;/strong&gt;. Together, they form &lt;strong&gt;"Microsoft IQ"&lt;/strong&gt; - a unified intelligence layer spanning productivity, data, and knowledge - designed to ground AI agents with deep enterprise context so they can make reliable decisions and continuously optimize operations.&lt;/p&gt;

&lt;p&gt;Each IQ layer addresses a distinct dimension of organizational context:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IQ Layer&lt;/th&gt;
&lt;th&gt;Context Domain&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Primary Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Work IQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User &amp;amp; work context&lt;/td&gt;
&lt;td&gt;Microsoft 365&lt;/td&gt;
&lt;td&gt;Captures collaboration signals - emails, meetings, chats, documents, relationships - and builds persistent memory of how people and teams work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fabric IQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Business &amp;amp; data context&lt;/td&gt;
&lt;td&gt;Microsoft Fabric&lt;/td&gt;
&lt;td&gt;Unifies analytical, operational, and real-time data into a governed semantic model with ontologies, graphs, and business rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry IQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Knowledge &amp;amp; reasoning context&lt;/td&gt;
&lt;td&gt;Microsoft Foundry (Azure AI Foundry)&lt;/td&gt;
&lt;td&gt;Creates multi-source, permission-aware knowledge bases with agentic retrieval for grounded, citation-backed answers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each workload is standalone, but they can be used together to provide a comprehensive organizational context for agents. For business decision-makers, these layers translate into &lt;strong&gt;faster time-to-insight, more trustworthy AI outputs, and the ability to deploy agents that act with the contextual awareness of experienced employees rather than generic assistants&lt;/strong&gt;. For developers building with &lt;strong&gt;Microsoft Copilot Studio&lt;/strong&gt; (low-code) or the &lt;strong&gt;Microsoft Agent Framework / Agent 365&lt;/strong&gt; (pro-code), the IQ layers provide ready-made intelligence services that eliminate the need to hand-build retrieval pipelines, semantic models, or user-context systems from scratch.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Work IQ - Personalizing AI with User &amp;amp; Collaboration Context
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What It Is
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Work IQ is the intelligence layer in Microsoft 365 that gives AI agents a real-time, permission-aware understanding of how people actually work.&lt;/strong&gt; It is built on three tightly integrated layers - &lt;strong&gt;Data, Memory, and Inference&lt;/strong&gt; - that work together to provide Microsoft 365 Copilot and custom agents with continuous contextual understanding of work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data&lt;/strong&gt; unifies signals from files, emails, meetings, chats, and business systems across Microsoft 365 to capture how work happens across the organization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; builds a persistent understanding of how people and teams work, enabling agents to stay aligned to priorities and remain consistent across tasks, apps, and sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference&lt;/strong&gt; brings together models, skills, and tools so agents can reason and take action while the &lt;strong&gt;Agent 365 control plane&lt;/strong&gt; ensures those actions remain observable, governed, and compliant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Work IQ connects to organizational and personal data - SharePoint files, Outlook emails, Teams meetings - and builds personalized memory based on user preferences, habits, and workflows. &lt;strong&gt;Conversational memory&lt;/strong&gt; in Microsoft 365 Copilot, powered by Work IQ, enables it to retain context and important details across sessions by drawing on a user's work profile, instructions, preferences, and insights from past chats. Users stay in control and can review or delete these memories at any time.&lt;/p&gt;

&lt;p&gt;Importantly, Work IQ does not merely retrieve information - &lt;strong&gt;it interprets context&lt;/strong&gt;. This is why a Work IQ-enabled agent can answer questions like &lt;em&gt;"What did we decide last week about the field project budget?"&lt;/em&gt; or &lt;em&gt;"Summarise the latest customer escalations and draft a report"&lt;/em&gt;. It reasons over signals, patterns, and workflows rather than searching a document library.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategic Value for Business
&lt;/h3&gt;

&lt;p&gt;For decision-makers, Work IQ delivers &lt;strong&gt;personalization at scale&lt;/strong&gt; without sacrificing security. It enables AI agents to recognize who a user works with, what they focus on, and how they typically accomplish tasks. Microsoft is now exposing the power of Work IQ through &lt;strong&gt;APIs&lt;/strong&gt;, allowing developers to build AI agents targeting specific enterprise scenarios beyond what the built-in Copilot offers.&lt;/p&gt;

&lt;p&gt;Work IQ also surfaces &lt;strong&gt;workflow intelligence&lt;/strong&gt; - for example, identifying that operations teams are overloaded handling exceptions manually, observing long email chains, or spotting recurring "delay review" meetings that consume capacity. This kind of insight goes beyond analytics into organizational awareness, helping leaders understand &lt;em&gt;where human effort is being consumed&lt;/em&gt; and where agents can provide the most value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tradeoff consideration:&lt;/strong&gt; Work IQ can only be as effective as the signals it can access. It is accessed primarily through Copilot and works best when collaboration data is well-structured and consistently captured in Microsoft 365 tools. Organizations with fragmented communication (e.g., heavy use of external email, shadow IT chat tools, or poorly organized SharePoint) will see diminished returns until information management improves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Integration - Copilot Studio
&lt;/h3&gt;

&lt;p&gt;Work IQ is surfaced to developers as &lt;strong&gt;Model Context Protocol (MCP) tools&lt;/strong&gt; that can be attached to agents in Copilot Studio. The following step-by-step process adds the &lt;strong&gt;Work IQ Mail&lt;/strong&gt; server to an agent:&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Sign in to &lt;strong&gt;Copilot Studio&lt;/strong&gt; and select or create your agent.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Tools&lt;/strong&gt; tab and then &lt;strong&gt;Add Tool&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;em&gt;Add tool&lt;/em&gt; page, select &lt;strong&gt;Model Context Protocol&lt;/strong&gt; to see Work IQ MCP servers and other MCP servers.&lt;/li&gt;
&lt;li&gt;Type &lt;strong&gt;"mail"&lt;/strong&gt; in the search box.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Work IQ Mail&lt;/strong&gt; and expand the &lt;strong&gt;connection&lt;/strong&gt; dropdown to select &lt;strong&gt;Create New Connection&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create&lt;/strong&gt;, provide credentials, and complete the sign-in process.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add and Configure&lt;/strong&gt; to complete the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the agent&lt;/strong&gt; - for example, prompt: &lt;em&gt;"Send an email to [name] and ask how the hands-on lab is going."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;When asked to allow the Work IQ tool to connect and use services, select &lt;strong&gt;Allow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After configuration, the agent can read email content, understand the context, and respond accordingly. &lt;strong&gt;Repeat these steps&lt;/strong&gt; for &lt;strong&gt;Work IQ Calendar&lt;/strong&gt; or &lt;strong&gt;Work IQ Teams&lt;/strong&gt; to extend the agent's capabilities with meeting insights, chats, and more&amp;gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; A &lt;strong&gt;Microsoft 365 Copilot license&lt;/strong&gt; is required to use Work IQ MCP servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Integration - Microsoft Agent Framework (Agent 365)
&lt;/h3&gt;

&lt;p&gt;For pro-code developers, the Work IQ tooling infrastructure is built into the &lt;strong&gt;Microsoft Agent 365 SDK and CLI&lt;/strong&gt;, Microsoft Foundry, and Copilot Studio. Agent 365 provides a secure, centralized gateway for extending agents with enterprise-ready tools through Work IQ for Microsoft 365 services and custom tooling servers for specialized workflows. This means developers building agents programmatically - using the Agent 365 SDK in Python, C#, or other supported languages - can invoke Work IQ's capabilities (querying recent communications, documents, or calendar entries) as part of an agent's reasoning loop without manually calling Microsoft Graph APIs and interpreting raw data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Governance and Security
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;IT administrators retain full control&lt;/strong&gt; over Work IQ MCP tools through the &lt;strong&gt;Microsoft 365 admin center&lt;/strong&gt; under the &lt;strong&gt;Agents and Tools&lt;/strong&gt; section, where they can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View all activated Work IQ MCP servers (Work IQ Mail, Work IQ Calendar, Work IQ Teams, and any custom servers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allow or block&lt;/strong&gt; specific servers based on organizational policies.&lt;/li&gt;
&lt;li&gt;Apply &lt;strong&gt;scoped permissions&lt;/strong&gt; so agents only access what they need.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an admin blocks a Work IQ MCP tool or MCP server, it blocks access for &lt;strong&gt;every user and every agent&lt;/strong&gt;. Permissions always take precedence over configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt; is built in via &lt;strong&gt;Microsoft Defender&lt;/strong&gt;. Admins can run queries in &lt;strong&gt;Advanced Hunting&lt;/strong&gt; to inspect trace logs of tool calls made by agents, monitor execution details (which tools were invoked, parameters passed, and outcomes), and detect anomalies or unauthorized usage patterns.&lt;/p&gt;

&lt;p&gt;All Work IQ MCP servers also undergo &lt;strong&gt;continuous evaluation&lt;/strong&gt;to measure accuracy, latency, and reliability, ensuring production-grade robustness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fabric IQ - Turning Enterprise Data into Business-Meaningful Intelligence
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What It Is
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fabric IQ (preview) is a workload in Microsoft Fabric that unifies data across OneLake and organizes it in the language of your business.&lt;/strong&gt; The unified data is then exposed to analytics, AI agents, and applications with &lt;strong&gt;consistent semantic meaning and context&lt;/strong&gt;. While Work IQ understands &lt;em&gt;work&lt;/em&gt;, Fabric IQ understands &lt;em&gt;data&lt;/em&gt; - and specifically what data &lt;strong&gt;means&lt;/strong&gt; in business terms.&lt;/p&gt;

&lt;p&gt;Fabric IQ models business data through &lt;strong&gt;ontologies, semantic models, and graphs&lt;/strong&gt; so agents can reason over analytics in OneLake and Power BI. It combines the following items into one semantic intelligence workload&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fabric IQ Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ontology (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise vocabulary and semantic layer that defines entity types, relationships, properties, and condition-action rules (through Fabric Activator). Binds definitions to real data so downstream tools share the same language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plan (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified no-code platform for collaborative planning, reporting, analytics, data integration, and management on a single platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Graph (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native graph storage and compute for nodes, edges, and traversals over connected data - suited to path finding, dependency analysis, and graph algorithms. Integrated with the ontology item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Agent (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conversational Q&amp;amp;A systems using generative AI that connect to the ontology to understand business concepts when answering questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operations Agent (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI agent to monitor real-time data and recommend business actions, aware of business terminology from the ontology&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Semantic Models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Curated analytics models optimized for reporting and interactive analysis with measures, hierarchies, and relationships. Ontologies can be generated directly from them&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Several of these items are shared with other Fabric workloads (e.g., Graph and Operations Agent are also part of Real-Time Intelligence; Data Agent is shared with Data Science).&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategic Value for Business
&lt;/h3&gt;

&lt;p&gt;Fabric IQ delivers six key benefits identified by Microsoft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unification of data&lt;/strong&gt; - Combines data from various OneLake sources (lakehouses, eventhouses, Power BI semantic models) into a single consistent model. Can also unify external operational data using OneLake shortcuts without copying data or building ETL pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent language across tools&lt;/strong&gt; - A single definition of a concept (like &lt;em&gt;Customer&lt;/em&gt;, &lt;em&gt;Material&lt;/em&gt;, or &lt;em&gt;Asset&lt;/em&gt;) drives how Power BI, notebooks, and agents interpret data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster onboarding&lt;/strong&gt; - Business concepts only need to be declared once, then new dashboards and AI experiences inherit that meaning automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance and trust&lt;/strong&gt; - Reduces duplication and inconsistent definitions across teams by enforcing clear semantics, while constraints improve data quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-domain reasoning&lt;/strong&gt; - Represents relationships between concepts with graph links, enabling traversals like &lt;em&gt;Order → Shipment → Temperature Sensor → Cold Chain Breach&lt;/em&gt; to explain outcomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI readiness and decision-ready actions&lt;/strong&gt; - Provides structured grounding for copilots and agents so answers reflect enterprise language. Rules defined in the ontology (via Fabric Activator) enable governed, real-time actions (e.g., alerts and notifications) when conditions are met.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For &lt;strong&gt;finance teams&lt;/strong&gt;, this means an AI agent can answer questions like &lt;em&gt;"Why did request volume spike in the North region last month?"&lt;/em&gt; or &lt;em&gt;"Show anomalies in field service cycle time"&lt;/em&gt; - grounded in what the data &lt;strong&gt;means&lt;/strong&gt;, not just where it lives. The semantic model ensures that metrics such as "net profit" and "customer churn" are calculated exactly as defined by the business, so CFOs can trust the AI's output.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;operations teams&lt;/strong&gt;, Fabric IQ's ontology can model supply chain entities, inventory levels, delivery metrics, and their relationships. When an on-time delivery percentage dips below historical norms, a Fabric IQ-informed agent can detect the anomaly, correlate it with upstream bottlenecks, and surface the issue before it escalates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tradeoff consideration:&lt;/strong&gt; Fabric IQ requires upfront investment in &lt;strong&gt;semantic modeling&lt;/strong&gt;. Organizations must define ontologies and business rules, which demands collaboration between data engineers and domain experts. Once agents depend on business meaning, that meaning becomes production infrastructure - semantic models must be versioned, governed, deployed, and monitored with the same rigor applied to code. For organizations already using Power BI, existing data models provide a head start: they instantly serve as a catalyst, giving agents rich, business-specific context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Integration
&lt;/h3&gt;

&lt;p&gt;Developers interact with Fabric IQ primarily through the &lt;strong&gt;Microsoft Fabric portal&lt;/strong&gt;, where they can create ontologies, bind them to data sources, and build Data Agents or Operations Agents that reason over the unified data model. The recommended approach for choosing the right Fabric IQ item depends on the scenario:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;When to Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ontology (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cross-domain consistency, governance, and AI/agent grounding; reasoning across processes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Graph (preview)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relationship-heavy questions (impact chains, communities, shortest paths) dominate; GQL-style pattern matching needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Semantic Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Business users need trusted KPIs and fast visuals with dimensional modeling and governed datasets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Several key item relationships support combined use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ontology + Semantic Model:&lt;/strong&gt; Generate or align Power BI semantic models so terminology and KPIs stay consistent across reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ontology + Graph:&lt;/strong&gt; Ontology declares which things connect and why; Graph stores and computes traversals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ontology + Data/Operations Agents:&lt;/strong&gt; Ontology grounds agents in shared business semantics and rules, enabling them to retrieve context, reason across domains, and trigger governed actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan + Semantic Model:&lt;/strong&gt; Plan connects to existing semantic models, allowing dimensions and measures to be used in planning sheets for seamless plan-versus-actuals analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Foundry IQ - Unified Knowledge Retrieval and Reasoning for AI Agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What It Is
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Foundry IQ (preview) is a managed knowledge layer in Microsoft Foundry that enables the creation of configurable, multi-source &lt;em&gt;knowledge bases&lt;/em&gt; providing agents with permission-aware, citation-backed responses based on organizational data&lt;/strong&gt;. It tackles what many architects consider the hardest challenge in agent design: &lt;strong&gt;knowledge retrieval and grounding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A Foundry IQ knowledge base consists of &lt;strong&gt;knowledge sources&lt;/strong&gt; (connections to internal and external data stores) and &lt;strong&gt;parameters that control retrieval behavior&lt;/strong&gt;. Multiple agents can share the same knowledge base. When an agent queries the knowledge base, Foundry IQ uses &lt;strong&gt;agentic retrieval&lt;/strong&gt; - a multi-query pipeline - to process the query, retrieve relevant information, enforce user permissions, and return grounded answers with citations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities
&lt;/h3&gt;

&lt;p&gt;Foundry IQ offers the following capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-source knowledge bases:&lt;/strong&gt; Connect one knowledge base to multiple agents. Supported knowledge sources include &lt;strong&gt;Azure Blob Storage, SharePoint, OneLake&lt;/strong&gt;, and &lt;strong&gt;public web data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated document processing:&lt;/strong&gt; Automate document chunking, &lt;strong&gt;vector embedding generation&lt;/strong&gt;, and metadata extraction for indexed knowledge sources. Schedule &lt;strong&gt;recurring indexer runs&lt;/strong&gt; for incremental data refresh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible query modes:&lt;/strong&gt; Issue &lt;strong&gt;keyword, vector, or hybrid queries&lt;/strong&gt; across indexed and remote knowledge sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic retrieval engine:&lt;/strong&gt; Uses a large language model to &lt;strong&gt;plan queries, select sources, run parallel searches, and aggregate results&lt;/strong&gt;. The retrieval reasoning effort can be configured at three levels: &lt;strong&gt;minimal, low, or medium&lt;/strong&gt; for LLM processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extractive data with citations:&lt;/strong&gt; Returns answers with source references so agents can reason over raw content and &lt;strong&gt;trace answers back to source documents&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission-aware:&lt;/strong&gt; Synchronizes &lt;strong&gt;access control lists (ACLs)&lt;/strong&gt; for supported sources and honors &lt;strong&gt;Microsoft Purview sensitivity labels&lt;/strong&gt;. Enforces permissions at query time so agents return only authorized content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity-based queries:&lt;/strong&gt; Runs queries under the caller's &lt;strong&gt;Microsoft Entra identity&lt;/strong&gt; for end-to-end permission enforcement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The underlying indexing and retrieval infrastructure is powered by &lt;strong&gt;Azure AI Search&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Components
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge base&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Top-level resource that orchestrates agentic retrieval. Defines which knowledge sources to query and parameters that control retrieval behavior, including retrieval reasoning effort (minimal, low, or medium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Knowledge sources&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Connections to indexed or remote content. A knowledge base references one or more knowledge sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agentic retrieval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-query pipeline that decomposes complex questions into subqueries, executes them in parallel, semantically reranks results, and returns unified responses. Uses an optional LLM from Azure OpenAI in Foundry Models for query planning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Foundry IQ knowledge bases can be used in &lt;strong&gt;Foundry Agent Service, Microsoft Agent Framework, or any custom application&lt;/strong&gt; by calling the knowledge base APIs from Azure AI Search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategic Value for Business
&lt;/h3&gt;

&lt;p&gt;Foundry IQ is the layer that makes AI &lt;strong&gt;enterprise-grade for knowledge work&lt;/strong&gt;. It enables agents to understand contracts, policies, procedures, SLAs, regulatory constraints, and unstructured documents - and to reason across them safely. The combination of &lt;strong&gt;permission enforcement and source citations&lt;/strong&gt; directly addresses the two most common executive concerns about enterprise AI: data leakage and hallucination. Every assertion the agent makes can be traced to a vetted document, supporting trust and auditability.&lt;/p&gt;

&lt;p&gt;Foundry IQ serves as &lt;strong&gt;a single endpoint for high-quality organizational data&lt;/strong&gt; to maximize context for AI applications. Its knowledge retrieval engine runs over multiple data sources including Work IQ, Fabric IQ, Azure data services, custom web applications, and the web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tradeoff consideration:&lt;/strong&gt; Because Foundry IQ indexes and retrieves content automatically, the &lt;strong&gt;quality of the knowledge base depends heavily on the quality and curation of source content&lt;/strong&gt;. Outdated, duplicated, or poorly written documents will produce lower-quality retrieval results. Organizations should invest in content hygiene (removing obsolete documents, standardizing formatting, clarifying ownership) before connecting sources to Foundry IQ. Additionally, Foundry IQ is currently in &lt;strong&gt;public preview&lt;/strong&gt; without a production service-level agreement, which means production-critical workloads should be tested thoroughly and planned around the preview constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Integration - Setting Up via the Microsoft Foundry Portal
&lt;/h3&gt;

&lt;p&gt;The typical portal-based workflow for Foundry IQ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign in to &lt;strong&gt;Microsoft Foundry&lt;/strong&gt; at &lt;a href="https://ai.azure.com" rel="noopener noreferrer"&gt;https://ai.azure.com&lt;/a&gt;. Ensure the &lt;strong&gt;"New Foundry"&lt;/strong&gt; toggle is on.&lt;/li&gt;
&lt;li&gt;Create a project or select an existing project.&lt;/li&gt;
&lt;li&gt;From the top menu, select &lt;strong&gt;Build&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Knowledge&lt;/strong&gt; tab:

&lt;ul&gt;
&lt;li&gt;Create or connect to an existing search service that supports agentic retrieval.&lt;/li&gt;
&lt;li&gt;Create a knowledge base by adding one knowledge source at a time.&lt;/li&gt;
&lt;li&gt;Configure knowledge base properties for retrieval behavior.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;On the &lt;strong&gt;Agents&lt;/strong&gt; tab:

&lt;ul&gt;
&lt;li&gt;Create or select an existing agent.&lt;/li&gt;
&lt;li&gt;Connect to your knowledge base.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;playground&lt;/strong&gt; to send messages and refine your agent.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For proof-of-concept testing, you can use the &lt;strong&gt;free tier for Azure AI Search&lt;/strong&gt; and a free allocation of tokens for agentic retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Integration - Connecting Foundry IQ to Agents Programmatically
&lt;/h3&gt;

&lt;p&gt;For pro-code developers, the connection from an agent to a Foundry IQ knowledge base uses the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; to facilitate tool calls. When invoked by the agent, the knowledge base orchestrates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plans and decomposes the user query into subqueries.&lt;/li&gt;
&lt;li&gt;Processes the subqueries simultaneously using keyword, vector, or hybrid techniques.&lt;/li&gt;
&lt;li&gt;Applies &lt;strong&gt;semantic reranking&lt;/strong&gt; to identify the most relevant results.&lt;/li&gt;
&lt;li&gt;Synthesizes the results into a &lt;strong&gt;unified response with source references&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SDK and API support&lt;/strong&gt; (as of the documentation)&amp;gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Python SDK&lt;/th&gt;
&lt;th&gt;C# SDK&lt;/th&gt;
&lt;th&gt;JavaScript SDK&lt;/th&gt;
&lt;th&gt;Java SDK&lt;/th&gt;
&lt;th&gt;REST API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Foundry&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;✔️&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt; for programmatic setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;Azure AI Search service&lt;/strong&gt; with a knowledge base containing one or more knowledge sources.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Microsoft Foundry project&lt;/strong&gt; with an LLM deployment (such as gpt-4.1-mini).&lt;/li&gt;
&lt;li&gt;Authentication and permissions configured on the search service and project.&lt;/li&gt;
&lt;li&gt;Python SDK version &lt;strong&gt;2.0.0 or later&lt;/strong&gt; or the &lt;strong&gt;2025-11-01-preview&lt;/strong&gt; REST API version:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For role-based access control (RBAC):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure AI User&lt;/strong&gt; role on the parent resource to access model deployments and create agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure AI Project Manager&lt;/strong&gt; role on the parent resource to create a project connection for MCP authentication.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;system-assigned managed identity&lt;/strong&gt; on the project for interactions with Azure AI Search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft provides an end-to-end Python sample on GitHub - the &lt;strong&gt;agentic-retrieval-pipeline-example&lt;/strong&gt; - for integrating Azure AI Search and Foundry Agent Service for knowledge retrieval.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Three IQ Layers Work Together - A Practical Scenario
&lt;/h2&gt;

&lt;p&gt;Understanding each IQ layer individually is important; understanding how they &lt;strong&gt;combine&lt;/strong&gt; is what unlocks transformative use cases. As one analysis frames it: think of a three-layer stack - &lt;strong&gt;Fabric IQ&lt;/strong&gt; at the foundation (structured data intelligence), &lt;strong&gt;Foundry IQ&lt;/strong&gt; in the middle (reasoning and knowledge grounding), and &lt;strong&gt;Work IQ&lt;/strong&gt; on top (human workflow intelligence).&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario: Supply Chain Delay Management (Operations)
&lt;/h3&gt;

&lt;p&gt;Consider a company building an AI agent to help manage supply chain delays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fabric IQ&lt;/strong&gt; detects anomalies in delivery metrics. It sees that certain suppliers are trending late beyond historical norms, notices that on-time delivery percentages are dipping in specific regions, and correlates delays with upstream bottlenecks. &lt;strong&gt;This is data-driven awareness&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foundry IQ&lt;/strong&gt; grounds the agent in supplier contracts, SLAs, penalty clauses, and internal policies. It understands what the agreement actually says about late deliveries, interprets escalation thresholds, and knows which suppliers have stricter terms. &lt;strong&gt;This is contextual reasoning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work IQ&lt;/strong&gt; observes that operations teams are overloaded handling these exceptions manually. It sees long email chains, recurring "delay review" meetings, and individuals spending hours every week tracking updates from vendors. It identifies patterns of reactive work consuming capacity. &lt;strong&gt;This is workflow intelligence&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;agent&lt;/strong&gt; combines all three streams: it recommends which delays need escalation based on contractual impact, drafts communications to suppliers referencing the correct SLA language, suggests internal reprioritization, and surfaces issues before they become crises.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scenario: Customer Service Knowledge Agent
&lt;/h3&gt;

&lt;p&gt;A customer service team deploys an agent using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundry IQ&lt;/strong&gt; as the primary knowledge source, indexing product manuals, troubleshooting guides, FAQs, and past support ticket resolutions. When a customer asks about error code E305, the agent retrieves the relevant manual section with a citation to the source document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work IQ&lt;/strong&gt; to access recent internal communications - for example, identifying that an engineering team discussed this exact error in a Teams conversation last week and already developed a workaround. The agent can surface this workaround alongside the official documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fabric IQ&lt;/strong&gt; to check whether the error is correlated with a particular product batch or region by querying the semantic model of manufacturing and logistics data, enabling the support agent to proactively notify affected customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scenario: Financial Reporting and Analysis (Finance)
&lt;/h3&gt;

&lt;p&gt;A finance team connects Fabric IQ to its consolidated financial data in OneLake and Power BI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Ontology&lt;/strong&gt; defines entities like &lt;em&gt;Account&lt;/em&gt;, &lt;em&gt;Transaction&lt;/em&gt;, &lt;em&gt;Cost Center&lt;/em&gt;, and &lt;em&gt;Region&lt;/em&gt; with standardized definitions for metrics like &lt;em&gt;Operating Margin&lt;/em&gt; and &lt;em&gt;Revenue Growth&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Data Agent&lt;/strong&gt; in Fabric IQ allows analysts to ask natural-language questions such as &lt;em&gt;"What are the top five cost centers by budget variance this quarter?"&lt;/em&gt; - grounded in the official semantic model, ensuring the answer uses Finance's own calculation methodology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foundry IQ&lt;/strong&gt; supplements this with knowledge from internal accounting policies, audit findings, and regulatory guidance documents, so the agent can explain &lt;em&gt;why&lt;/em&gt; a variance occurred and whether it triggers any policy-based escalation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work IQ&lt;/strong&gt; can surface the context of recent discussions among the finance team (e.g., &lt;em&gt;"The CFO discussed this variance in Monday's meeting and requested a root-cause analysis by Friday"&lt;/em&gt;), ensuring the AI's recommendations are aligned with current priorities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Guidance for Copilot Studio and Agent Framework Developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choosing the Right Development Platform
&lt;/h3&gt;

&lt;p&gt;Microsoft offers two primary paths for agent development, and &lt;strong&gt;both&lt;/strong&gt; can leverage the IQ layers. The choice depends on the developer persona and scenario complexity:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;Copilot Studio&lt;/th&gt;
&lt;th&gt;Microsoft Agent Framework (Agent 365 SDK)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Target audience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Business users, makers, power users, fusion teams&lt;/td&gt;
&lt;td&gt;Professional developers, IT teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-code / no-code with visual design canvas&lt;/td&gt;
&lt;td&gt;Pro-code (Python, C# SDKs) with full programmatic control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IQ integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Work IQ via MCP tools (Add Tool &amp;gt; Model Context Protocol); Foundry IQ via MCP connection; Fabric IQ via Fabric Data Agent&lt;/td&gt;
&lt;td&gt;Work IQ via Agent 365 SDK; Foundry IQ via knowledge base APIs and Python SDK; Fabric IQ via APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in through Agent 365 control plane + M365 admin center&lt;/td&gt;
&lt;td&gt;Same Agent 365 governance + Azure RBAC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FAQ bots, task-specific assistants, business-process agents with moderate complexity&lt;/td&gt;
&lt;td&gt;Multi-agent orchestration, complex retrieval pipelines, custom reasoning logic, enterprise-grade production agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Copilot Studio is aimed at &lt;strong&gt;low-code builders&lt;/strong&gt; while Azure AI Foundry serves &lt;strong&gt;pro-code developers&lt;/strong&gt;; Agent 365 delivers a consistent, developer-friendly experience backed by rigorous evaluation for accuracy, latency, and reliability across both paths.&lt;/p&gt;

&lt;p&gt;These platforms are not mutually exclusive. A common pattern is to use &lt;strong&gt;Foundry&lt;/strong&gt; to build and fine-tune the agent's reasoning backend (including Foundry IQ knowledge bases) and &lt;strong&gt;Copilot Studio&lt;/strong&gt; for the conversational front-end and deployment to Microsoft 365 channels. Microsoft also supports &lt;strong&gt;connecting a Foundry agent directly into Copilot Studio&lt;/strong&gt; for organizations that want pro-code control over the backend with low-code deployment】.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Developer Resources
&lt;/h3&gt;

&lt;p&gt;Microsoft provides a &lt;strong&gt;hands-on learning experience&lt;/strong&gt; called the &lt;strong&gt;IQ Series&lt;/strong&gt; - an official GitHub repository (microsoft/iq-series) that includes video episodes, Jupyter notebooks, and Azure deployment templates spanning Foundry IQ, Work IQ, and Fabric IQ. This is a valuable starting point for developers exploring integration patterns.&lt;/p&gt;

&lt;p&gt;For Copilot Studio, the &lt;strong&gt;Copilot-Studio-and-Azure&lt;/strong&gt; GitHub repository includes a lab on &lt;strong&gt;Microsoft Foundry agentic retrieval&lt;/strong&gt; (labs/2.4-microsoft-foundry-agentic-retrieval) with a notebook (foundry-IQ-agents.ipynb) that demonstrates how to connect Copilot Studio agents to Foundry IQ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Best Practices
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Curate your knowledge sources deliberately.&lt;/strong&gt; For Foundry IQ, prioritize high-quality, authoritative content - official policy libraries, product documentation, and knowledge articles that customer service reps already use. Remove outdated or duplicated material before indexing. Please use scheduled indexing for incremental data refresh so agents always use the current information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Invest in semantic modeling.&lt;/strong&gt; For Fabric IQ, collaborate with business domain experts to design ontologies that capture actual business rules, relationships, and terminology. Start from existing &lt;strong&gt;Power BI semantic models&lt;/strong&gt; when possible - they can be used as a bootstrap for ontologies, keeping language consistent across Fabric experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Clean up collaboration data.&lt;/strong&gt; For Work IQ, ensure that the organization's SharePoint structures are tidy, file ownership is clear, and key processes are documented. Reduce duplication and align Dataverse models with real business logic. As noted in an analysis by VisualLabs, &lt;em&gt;"Copilot cannot infer intent from SharePoint chaos"&lt;/em&gt; - AI amplifies what already exists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Combine IQ layers for maximum impact. **Foundry IQ can incorporate Work IQ and Fabric IQ as data sources&lt;/strong&gt;, enabling custom agents to unify all three context dimensions through a single retrieval interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Govern and monitor rigorously.&lt;/strong&gt; Use the &lt;strong&gt;M365 admin center&lt;/strong&gt; for Work IQ tool governance and &lt;strong&gt;Azure RBAC&lt;/strong&gt; for Foundry IQ permissions. Use &lt;strong&gt;Microsoft Defender's Advanced Hunting&lt;/strong&gt; to audit all tool calls your agents make in production. For Foundry IQ, enforce permissions at query time by passing user tokens to filter results based on identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Use the "Bring Your Own Model" capability strategically.&lt;/strong&gt; Copilot Studio supports connecting models from &lt;strong&gt;Microsoft Foundry's model catalog&lt;/strong&gt; (including GPT 4.5, Llama, DeepSeek, and &lt;strong&gt;11,000+ more models&lt;/strong&gt;) to specific prompt actions within an agent. This allows you to pick the best-performing model for each task - not just use a single model globally. Governance for these model connections is managed through &lt;strong&gt;Power Platform admin center policies&lt;/strong&gt; under the "Microsoft Foundry" connector.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case Summary
&lt;/h2&gt;

&lt;p&gt;The following table consolidates practical use cases across three domains, illustrating which IQ layers contribute and how:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Work IQ Contribution&lt;/th&gt;
&lt;th&gt;Fabric IQ Contribution&lt;/th&gt;
&lt;th&gt;Foundry IQ Contribution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customer Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intelligent support agent that resolves complex tickets&lt;/td&gt;
&lt;td&gt;Surfaces recent internal discussions about the issue (Teams chats, email threads)&lt;/td&gt;
&lt;td&gt;Correlates the issue with product batch data, defect rates, or regional patterns&lt;/td&gt;
&lt;td&gt;Retrieves official troubleshooting guides, product manuals, and policy documents with citations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automated financial analysis and variance reporting&lt;/td&gt;
&lt;td&gt;Identifies which finance team members have been discussing a variance and surfaces meeting action items&lt;/td&gt;
&lt;td&gt;Provides a governed semantic model of financial KPIs, ensuring consistent definitions (e.g., how "operating margin" is calculated)&lt;/td&gt;
&lt;td&gt;Grounds the agent in accounting policies, audit findings, and regulatory guidance documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supply chain delay advisor&lt;/td&gt;
&lt;td&gt;Detects that ops teams are overloaded with manual exception handling (long email chains, recurring meetings)&lt;/td&gt;
&lt;td&gt;Identifies anomalies in delivery metrics, correlates delays with upstream bottlenecks, and detects regional performance dips&lt;/td&gt;
&lt;td&gt;Retrieves supplier contracts, SLAs, and penalty clauses to determine contractual obligations and escalation thresholds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HR / Onboarding&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New employee onboarding assistant&lt;/td&gt;
&lt;td&gt;Understands who the new hire's team members are and what projects are active&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Retrieves onboarding guides, IT setup instructions, benefits documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Regulatory compliance advisor&lt;/td&gt;
&lt;td&gt;Tracks which compliance officers have been communicating about a specific regulatory change&lt;/td&gt;
&lt;td&gt;Monitors regulatory metrics and flags anomalies against defined thresholds&lt;/td&gt;
&lt;td&gt;Retrieves the latest regulatory texts, internal policies, and past audit reports with citations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Addressing the Runtime and Governance Layer: Agent 365
&lt;/h2&gt;

&lt;p&gt;No discussion of enterprise agent deployment is complete without addressing &lt;strong&gt;who monitors these agents and who is accountable for them&lt;/strong&gt;. Microsoft's answer is &lt;strong&gt;Agent 365&lt;/strong&gt; - the runtime and governance layer that sits over all IQ workloads and agent interactions.&lt;/p&gt;

&lt;p&gt;Agent 365 monitors agent decisions, tracks accuracy over time, enforces compliance boundaries, and provides deep &lt;strong&gt;observability&lt;/strong&gt; into how agents behave in the real world. It gives visibility into what the agent is doing, why it is doing it, and whether it is staying within defined guardrails. This is not just logging - it is operational control: knowing when performance drifts, when policies change, and when human override is required. Without this layer, as one analysis notes, &lt;em&gt;"you have experiments - clever, promising, but fragile. With it, you have enterprise-grade systems that can scale responsibly."&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For organizations evaluating AI agent initiatives, the presence of Agent 365 as a centralized governance layer is a critical factor in the build-versus-buy decision. It combines extensibility, security, and compliance to help organizations confidently scale AI agents across productivity and business systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Turning Enterprise Context into Competitive Advantage
&lt;/h2&gt;

&lt;p&gt;Work IQ, Fabric IQ, and Foundry IQ represent a structural shift in how enterprises build AI agents. Rather than bolting generic AI onto existing workflows, these intelligence layers &lt;strong&gt;embed organizational understanding directly into the agent's reasoning process&lt;/strong&gt; - from user collaboration patterns (Work IQ) to governed business semantics (Fabric IQ) to secure, multi-source knowledge retrieval (Foundry IQ).&lt;/p&gt;

&lt;p&gt;For business decision-makers evaluating AI investments, the implication is clear: &lt;strong&gt;the value of enterprise AI is proportional to the quality and depth of context it can access&lt;/strong&gt;. Organizations that invest in structuring their work data (M365), defining business semantics (Fabric), and curating knowledge bases (Foundry) will extract far more value from AI agents than those relying on generic models. KPMG's survey found that among organizations scaling AI, the top ROI metrics are productivity (cited by 98% of leaders), profitability (97%), and improved performance and work quality (94%) - all outcomes that depend on context-rich, trustworthy AI rather than raw model capability.&lt;/p&gt;

&lt;p&gt;For developers, the three IQ layers provide &lt;strong&gt;a clear architecture and integration path&lt;/strong&gt; - whether through Copilot Studio's visual MCP tool integration or through the Agent 365 SDK's programmatic APIs. The key is to start with well-defined data foundations (clean SharePoint, governed Fabric models, curated knowledge sources) and progressively layer in IQ capabilities as agent scenarios mature.&lt;/p&gt;

&lt;p&gt;The organizations that will lead in the agentic era are those that recognize deployment is only the beginning - and that &lt;strong&gt;contextual intelligence, not model size, is the true differentiator&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>agents</category>
    </item>
    <item>
      <title>Connecting Azure Application Insights to Microsoft Copilot Studio: Unlocking Deep Analytics for Agentic Systems</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 18 Apr 2026 07:08:42 +0000</pubDate>
      <link>https://dev.to/holgerimbery/connecting-azure-application-insights-to-microsoft-copilot-studio-unlocking-deep-analytics-for-13m8</link>
      <guid>https://dev.to/holgerimbery/connecting-azure-application-insights-to-microsoft-copilot-studio-unlocking-deep-analytics-for-13m8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Agentic systems demand visibility. By connecting Azure Application Insights to your Copilot Studio agents, you gain enterprise-grade monitoring that goes far beyond built-in analytics—enabling real-time diagnostics, performance optimization, and strategic business insights in a single integrated platform.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why read this&lt;/strong&gt;: You'll discover how to unlock faster issue detection and resolution, measure and improve user experience, demonstrate ROI to stakeholders, and establish the telemetry foundation that separates high-performing teams from those operating blindly. This guide walks through prerequisites, configuration steps, and best practices to help you implement a mature observability strategy immediately.&lt;/p&gt;

&lt;p&gt;As agentic systems grow in complexity and autonomy, visibility becomes critical. Analytics illuminate how agents interpret user intent, make decisions, and interact with external systems—transforming a "black box" into an understandable, debuggable, and continuously improving system. In production environments, telemetry reveals performance bottlenecks, catches errors before users notice them, and provides the evidence base for optimizing agent behavior and dialog flows. Without analytics, teams operate blindly; with it, they make data-driven decisions and build trust through transparency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Connecting Azure Application Insights to Copilot Studio
&lt;/h2&gt;

&lt;p&gt;Connecting &lt;strong&gt;Azure Application Insights&lt;/strong&gt; to &lt;strong&gt;Microsoft Copilot Studio&lt;/strong&gt; agents significantly extends your monitoring, diagnostics, and analytics capabilities far beyond the native tooling provided by Copilot Studio alone. Application Insights, a powerful component of the broader &lt;strong&gt;Azure Monitor&lt;/strong&gt; platform, is a fully extensible Application Performance Management (APM) service designed to meet enterprise-scale requirements. This service captures granular message-level telemetry, topic trigger events, interaction latency measurements, custom domain-specific events, and comprehensive error details in near real-time, enabling immediate visibility into agent behavior. By establishing this integration, organizations gain access to both fine-grained technical observability, which empowers engineering teams to debug and optimize agent performance, and strategic usage intelligence, which informs business stakeholders about adoption patterns, user satisfaction trends, and operational efficiency metrics.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Key Benefits Overview
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Benefit Area&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Technical Capabilities&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Business / Strategic Value&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real-Time Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Live telemetry stream of conversations; configurable Azure Monitor alerts for anomalies or thresholds&lt;/td&gt;
&lt;td&gt;Proactive issue detection minimizes downtime; enables swift scaling responses during usage spikes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Latency and performance data per interaction; Smart Detection flags unusual performance drops automatically&lt;/td&gt;
&lt;td&gt;Faster, more reliable agent increases user satisfaction; reduces abandonment from slow responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Diagnostics &amp;amp; Error Logging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic capture of exceptions with full context (stack traces, conversation state, topic/step); custom telemetry events for domain-specific tracking&lt;/td&gt;
&lt;td&gt;Faster troubleshooting lowers support costs; higher reliability builds user trust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Interaction Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conversation counts, active users, channels, topics triggered, session durations — queryable via KQL&lt;/td&gt;
&lt;td&gt;Data-driven improvements to dialog design; evidence base for prioritizing development effort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dashboards &amp;amp; Reporting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-built Copilot Studio Dashboard (Azure Workbook) with total conversations, latency, exceptions, tool usage, and topic analytics — editable and shareable&lt;/td&gt;
&lt;td&gt;Cross-functional visibility for technical and business stakeholders; supports ROI reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ecosystem Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Connects to Power BI, Azure Data Lake, Azure Monitor alerts, and other Azure services&lt;/td&gt;
&lt;td&gt;Enterprise-grade reporting pipelines; cross-system correlation between bot telemetry and business outcomes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom Events &amp;amp; Extensibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Log a custom telemetry event" action in Copilot Studio for domain-specific tracking; KQL for arbitrary analysis&lt;/td&gt;
&lt;td&gt;Tailored KPI tracking (resolution rates, conversion events); structured A/B testing of agent configurations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How Telemetry Is Collected
&lt;/h2&gt;

&lt;p&gt;Setting up Application Insights for your Copilot Studio agents involves configuring where and how telemetry data flows. The process is straightforward but requires understanding key configuration options and prerequisites. Here's what you need to know to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Per-agent configuration&lt;/strong&gt;: There is no tenant-wide switch. Each agent must be connected to Application Insights individually.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Setup&lt;/strong&gt;: Add the Application Insights connection string in &lt;code&gt;Settings → Advanced → Application Insights&lt;/code&gt; within Copilot Studio.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Azure Subscription&lt;/strong&gt;: Required to use Application Insights.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Logging Options&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;Log activities&lt;/code&gt;: Logs all incoming/outgoing messages and events.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Log sensitive Activity properties&lt;/code&gt;: Includes &lt;code&gt;userid&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;, and &lt;code&gt;speak&lt;/code&gt;. Off by default due to privacy implications.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Metrics and Data Are Available
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Custom Dimensions
&lt;/h3&gt;

&lt;p&gt;Telemetry records include rich metadata in the &lt;code&gt;customDimensions&lt;/code&gt; field:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Sample Values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type of activity&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;message&lt;/code&gt;, &lt;code&gt;conversationUpdate&lt;/code&gt;, &lt;code&gt;event&lt;/code&gt;, &lt;code&gt;invoke&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;channelId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Channel identifier&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;emulator&lt;/code&gt;, &lt;code&gt;directline&lt;/code&gt;, &lt;code&gt;msteams&lt;/code&gt;, &lt;code&gt;webchat&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fromId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sender identifier&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fromName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Username from client&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;John Bonham&lt;/code&gt;, &lt;code&gt;Keith Moon&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;locale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Client origin locale&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;en-us&lt;/code&gt;, &lt;code&gt;zh-cn&lt;/code&gt;, &lt;code&gt;de-de&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recipientId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recipient identifier&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recipientName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recipient name&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;John Bonham&lt;/code&gt;, &lt;code&gt;Keith Moon&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text in message&lt;/td&gt;
&lt;td&gt;&lt;code&gt;find a coffee shop&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;designMode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether conversation occurred in the test canvas&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;True&lt;/code&gt; / &lt;code&gt;False&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;{: .important }&lt;br&gt;
Note: Data quality varies by channel. For example, unique user counts are only reliable when users are authenticated.&lt;/p&gt;
&lt;h3&gt;
  
  
  Built-In Copilot Studio Dashboard
&lt;/h3&gt;

&lt;p&gt;Copilot Studio provides a pre-built Azure Workbook dashboard that offers immediate visibility into your agent's performance and usage patterns. This dashboard aggregates key metrics without requiring custom configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Location&lt;/strong&gt;: &lt;code&gt;Application Insights → Monitoring → Workbooks → Copilot Studio Dashboard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Metrics Included&lt;/strong&gt;: Total conversations, latency, exceptions, tool usage, topic analytics&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Customizable&lt;/strong&gt;: Add tiles using KQL, save and share dashboards with team members (requires Reader role)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  KQL Querying
&lt;/h3&gt;

&lt;p&gt;Use &lt;strong&gt;Kusto Query Language (KQL)&lt;/strong&gt; to analyze telemetry data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp &amp;gt; queryStartDate
| where timestamp &amp;lt; queryEndDate
| summarize uc=dcount(user_Id) by bin(timestamp, groupByInterval)
| render timechart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To exclude test conversations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customEvents
| extend isDesignMode = customDimensions['designMode']
| where isDesignMode == "False"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Built-In Analytics vs. Application Insights
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Built-In Analytics&lt;/th&gt;
&lt;th&gt;Azure Application Insights&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Track topic usage and completion&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes (with custom events)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand user satisfaction&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes (if instrumented)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debug dialog transitions&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitor API latency or errors&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visualize trends over time&lt;/td&gt;
&lt;td&gt;yes (limited)&lt;/td&gt;
&lt;td&gt;yes (custom dashboards)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correlate with external systems&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alerting and anomaly detection&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;{: .important }&lt;br&gt;
Application Insights complements — not replaces — built-in analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Benefits
&lt;/h2&gt;

&lt;p&gt;Application Insights delivers powerful technical capabilities that transform agent monitoring and diagnostics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Live Metrics&lt;/strong&gt;: Real-time monitoring of bot activity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Smart Detection&lt;/strong&gt;: Automatic anomaly and performance issue detection.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Custom Telemetry&lt;/strong&gt;: Log domain-specific events from within Copilot Studio.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Centralized Monitoring&lt;/strong&gt;: Consolidate logs, metrics, and traces across agents.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability&lt;/strong&gt;: Monitor bots across multiple environments and regions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Extensibility&lt;/strong&gt;: Integrate with Power BI, Azure Data Lake, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Business Value and Strategic Advantages
&lt;/h2&gt;

&lt;p&gt;Application Insights transforms agent monitoring from a purely technical exercise into a strategic business tool. By connecting telemetry data to measurable outcomes, organizations can demonstrate ROI, accelerate innovation cycles, and build confidence in agentic systems. The following sections explore the key business advantages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Data-Driven Decision-Making
&lt;/h3&gt;

&lt;p&gt;Telemetry provides the foundation for evidence-based improvements across your agent ecosystem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use telemetry to understand user behavior, optimize dialog flows, and prioritize development.&lt;/li&gt;
&lt;li&gt;  Dashboards and reports provide evidence for product decisions and stakeholder communication.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Operational Efficiency
&lt;/h3&gt;

&lt;p&gt;Application Insights dramatically reduces the time and effort required to maintain reliable agents in production. By automating detection and providing detailed diagnostics, teams can respond faster to issues and prevent recurring problems from consuming resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reduce mean time to detect and resolve issues.&lt;/li&gt;
&lt;li&gt;  Identify systemic issues and eliminate recurring failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Customer Satisfaction
&lt;/h3&gt;

&lt;p&gt;Application Insights enables you to measure and enhance user experience by providing visibility into agent responsiveness and identifying friction points in conversations. By understanding where users encounter delays or confusion, teams can make targeted improvements that directly impact satisfaction and retention.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Improve response times and reduce errors.&lt;/li&gt;
&lt;li&gt;  Analyze drop-offs and confusion points to refine UX.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Compliance and Auditing
&lt;/h3&gt;

&lt;p&gt;In regulated industries and enterprises subject to data governance requirements, comprehensive audit trails and compliance documentation are non-negotiable. Application Insights provides the forensic capabilities needed to demonstrate regulatory compliance, investigate incidents, and maintain defensible records of agent behavior and data handling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Maintain detailed logs for audit trails.&lt;/li&gt;
&lt;li&gt;  Support regulatory requirements with timestamped, queryable data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;Implementing a robust telemetry strategy requires discipline and intentionality. The following best practices will help you maximize the value of Application Insights while minimizing operational overhead and ensuring data quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log Meaningful Events&lt;/strong&gt;: When instrumenting your Copilot Studio agents, focus exclusively on capturing events that provide actionable intelligence. This includes clear indicators of user intent (such as topic invocations or explicit requests), documented dialog outcomes (successful resolutions, escalations, or abandonment), and comprehensive error context. By avoiding noise and focusing on the signal, you reduce data volume while improving analysis quality and reducing query latency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Correlation IDs&lt;/strong&gt;: Implement correlation identifiers to link related activities across multiple services, dialogs, and organizational boundaries. This practice is essential in distributed systems where a user's interaction may involve multiple agents, backend APIs, and cloud services. Correlation IDs enable end-to-end tracing of requests, making it significantly easier to diagnose complex failures and understand latency across the entire interaction pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Up Alerts&lt;/strong&gt;: Configure Azure Monitor alerts on critical performance thresholds and anomalies. Rather than waiting to discover problems through manual dashboard review, proactive alerting ensures that your team is immediately notified of concerning patterns—such as sudden spikes in error rates, performance degradation, or unexpected traffic patterns. This enables rapid response before issues escalate into user-facing problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review Dashboards Regularly&lt;/strong&gt;: Establish a cadence for reviewing Application Insights dashboards with relevant stakeholders—both technical teams who investigate issues and business stakeholders who track adoption metrics. Regular review sessions transform telemetry from a passive record into an active feedback loop that informs prioritization, guides feature development, and validates hypotheses about agent behavior and user satisfaction.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connect your Copilot Studio agent to Application Insights
&lt;/h2&gt;

&lt;p&gt;Establishing a connection between your Copilot Studio agent and Azure Application Insights requires careful configuration to ensure telemetry data flows correctly to your monitoring environment. This section provides comprehensive guidance on the setup process, prerequisites, and optional configuration settings that affect which data is captured and transmitted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites and Initial Setup
&lt;/h3&gt;

&lt;p&gt;Before you can establish a successful connection between your Copilot Studio agent and Application Insights, ensure that you have an active Azure subscription and an existing Application Insights resource. The connection process relies on authentication credentials stored in your agent's configuration so that you will need administrative access to both your Copilot Studio environment and your Azure resources.&lt;/p&gt;

&lt;p&gt;To initiate the connection process, navigate to the &lt;strong&gt;Settings&lt;/strong&gt; page for your agent within Copilot Studio. From the Settings page, locate and select the &lt;strong&gt;Advanced&lt;/strong&gt; tab. This tab contains configuration options not exposed in the standard settings interface and typically reserved for operational and monitoring settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring the Application Insights Connection String
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80rrub187s7syde2rker.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80rrub187s7syde2rker.png" alt="upgit_20260401_1775031412.png" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within the Advanced settings tab, you will find a dedicated &lt;strong&gt;Application Insights&lt;/strong&gt; section. In this section, locate the &lt;strong&gt;Connection string&lt;/strong&gt; field and populate it with the connection string obtained from your Azure Application Insights resource.&lt;/p&gt;

&lt;p&gt;The connection string serves as the authentication and routing credential that enables your agent to transmit telemetry data to your specific Application Insights instance securely. Refer to the &lt;a href="https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview" rel="noopener noreferrer"&gt;Azure Monitor documentation&lt;/a&gt; for comprehensive instructions on locating and retrieving your connection string from your Application Insights resource in the Azure portal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional Logging Configuration
&lt;/h3&gt;

&lt;p&gt;In addition to basic connectivity, Application Insights offers two optional configuration flags that let you control the scope and sensitivity of captured telemetry data. These settings provide flexibility to balance comprehensive monitoring with privacy and compliance considerations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log Activities&lt;/strong&gt;: When this setting is enabled, Application Insights captures comprehensive details of all incoming and outgoing messages exchanged between users and your agent, as well as all event notifications triggered during agent operation. This option provides maximum visibility into agent behavior and user interactions, enabling detailed diagnostics and comprehensive audit trails. However, enabling this option increases telemetry volume and may have cost implications for higher-traffic agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log Sensitive Activity Properties&lt;/strong&gt;: This setting governs whether certain data fields that may contain personally identifiable information (PII) or other sensitive information are included in logged telemetry. When enabled, the following properties are captured in logs: &lt;code&gt;userid&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;, and &lt;code&gt;speak&lt;/code&gt; (note that the &lt;code&gt;text&lt;/code&gt; and &lt;code&gt;speak&lt;/code&gt; properties apply exclusively to message-type activities and are not captured for other event types).&lt;/p&gt;

&lt;p&gt;By default, this setting is &lt;strong&gt;disabled&lt;/strong&gt; due to data privacy and compliance considerations. Organizations operating under strict data governance frameworks, healthcare regulations (HIPAA), financial regulations (PCI-DSS), or general privacy standards (GDPR) should exercise caution when enabling this option. If enabled, ensure that appropriate data retention policies, encryption measures, and access controls are in place to protect sensitive information logged to Application Insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Connecting your Copilot Studio agents to Azure Application Insights represents a fundamental shift in how you approach agent observability and operational excellence. By moving beyond built-in analytics, you gain enterprise-grade monitoring capabilities that illuminate every aspect of agent behavior—from granular message-level telemetry to high-level strategic insights about adoption and ROI.&lt;/p&gt;

&lt;p&gt;The integration delivers immediate practical benefits: faster issue detection and resolution, performance optimization grounded in real data, and comprehensive audit trails that satisfy regulatory requirements. It also turns your organization's relationship with agentic systems from speculative to evidence-driven, so you can scale confidently and keep improving.&lt;/p&gt;

&lt;p&gt;Whether your priority is reducing support costs, accelerating time-to-resolution, or demonstrating measurable business value to stakeholders, Application Insights provides the visibility and analytical power to achieve those goals. Start with the fundamentals—configure the connection string, enable appropriate logging, and establish a dashboard review cadence. As your telemetry practice matures, layer in custom events, automated alerts, and deeper correlation across your broader system ecosystem.&lt;/p&gt;

&lt;p&gt;Telemetry infrastructure pays off right away and grows over time as your teams build data-driven habits, and your agents become more reliable, responsive, and aligned with business goals.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>applicationinsights</category>
      <category>azure</category>
    </item>
    <item>
      <title>Building On‑Prem AI Agents with Azure Local, Foundry Local, and Microsoft Agent Framework</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sat, 11 Apr 2026 07:26:18 +0000</pubDate>
      <link>https://dev.to/holgerimbery/building-on-prem-ai-agents-with-azure-local-foundry-local-and-microsoft-agent-framework-5a83</link>
      <guid>https://dev.to/holgerimbery/building-on-prem-ai-agents-with-azure-local-foundry-local-and-microsoft-agent-framework-5a83</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cloud-native architecture belongs on-premises too&lt;br&gt;&lt;br&gt;
&lt;strong&gt;On-premises and cloud-native are not contradictions — they are complementary&lt;/strong&gt;. While enterprises have spent years building cloud-native practices in the cloud, those same principles—containerization, orchestration, API-driven integration, and infrastructure-as-code - deliver even greater value when deployed on-premises. This guide shows you how to build production AI agents that (must) run locally and using cloud native deployment schemas with Azure Local, Foundry Local, and Microsoft Agent Framework - this is proving that cloud-native excellence is not constrained by your network boundary.&lt;br&gt;&lt;br&gt;
If you operate in regulated industries, manage constrained connectivity, or face data residency requirements, this architecture gives you the operational consistency of the cloud without leaving your premises.&lt;/p&gt;

&lt;p&gt;This article is the second in a series on Azure Local:&lt;br&gt;&lt;br&gt;
&lt;a href="https://holgerimbery.blog/azure-local-foundry-local-and-microsoft-365-local-a-comprehensive-guide-for-it-architects-and-decision-makers" rel="noopener noreferrer"&gt;Azure Local, Foundry Local, and Microsoft 365 Local: A Comprehensive Guide for IT Architects and Decision-Makers&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enterprise teams are moving beyond “chatbots” toward agents that can retrieve internal knowledge, call tools, orchestrate workflows, and produce outcomes aligned to real business processes. The challenge is that many agent reference designs assume always‑on cloud connectivity and cloud-hosted inference. That assumption does not hold everywhere.&lt;/p&gt;

&lt;p&gt;In regulated industries, in plants and branches with constrained connectivity, or in environments where latency and data locality are non‑negotiable, the architecture has to follow the use case. This post describes a pragmatic design you can implement today by combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure Local&lt;/strong&gt; as the on‑prem infrastructure substrate, managed through &lt;strong&gt;Azure Arc&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AKS on Azure Local&lt;/strong&gt; as the standardized Kubernetes runtime for agent services and supporting components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foundry Local (preview)&lt;/strong&gt; as the local inference runtime exposing an &lt;strong&gt;OpenAI‑compatible REST interface&lt;/strong&gt; for model calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Agent Framework (MAF)&lt;/strong&gt; as the agent and workflow layer, including tool integration, session/state management, middleware, and telemetry patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A critical insight: cloud-native architecture and practices are not limited to cloud deployments.&lt;/strong&gt; The principles—containerization, orchestration, infrastructure-as-code, API-driven integration, observability, and declarative state management—are equally valuable on‑premises. In fact, they become &lt;em&gt;more essential&lt;/em&gt; when your infrastructure cannot scale elastically or rely on the implicit redundancy of cloud regions. By applying cloud-native architecture to on‑prem agent deployments, you gain consistent operational models across locations, faster iteration, clear boundaries between layers, and the ability to treat infrastructure changes as routine rather than exceptional.&lt;/p&gt;

&lt;p&gt;One design choice drives everything that follows: &lt;strong&gt;separate the agent runtime from the model runtime.&lt;/strong&gt; You want the agent layer (routing, tools, workflows, state, observability) to evolve independently from inference, especially when local inference is in preview and can change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture in one picture (logical view)
&lt;/h2&gt;

&lt;p&gt;A practical baseline pattern is “local inference, centralized orchestration.”&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7s07rlie2kn629q44p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7s07rlie2kn629q44p3.png" alt="upgit_20260409_1775761970.png" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This separation keeps your application surface stable by establishing a clear boundary between stateless agent logic and stateful model inference. Because the agent layer and model runtime are decoupled, you can update agent code, refine routing logic, add new tools, or adjust middleware without touching the inference layer. Tools can be added safely behind constrained proxies or API gateways, allowing you to apply fine-grained network controls and audit trails at the integration boundary. Governance policies, observability hooks, and logging patterns remain consistent across agent operations regardless of where inference is placed. Simultaneously, inference becomes a managed dependency that can scale, relocate, or upgrade independently of application code. This architectural separation is particularly valuable in regulated environments where model serving and application logic often require separate operational controls, hardware isolation, or audit commitments. By decoupling these layers, you achieve the flexibility to place inference close to hardware accelerators (GPUs, NPUs) and data sources without forcing agent code to depend on infrastructure choices that are still evolving, especially when the inference runtime is in preview status and subject to API changes or performance tuning.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where this approach fits (and where it does not)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  This is a good fit when
&lt;/h3&gt;

&lt;p&gt;This pattern becomes the right choice when one or more of the following constraints are fundamental to your deployment environment:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data residency and regulatory compliance&lt;/strong&gt; are hard boundaries. When regulations, industry standards, or organizational policy require that prompts, retrieved context, and inference results remain physically within an on‑premises boundary—whether for financial data, healthcare records, or proprietary intelligence—local inference becomes non‑negotiable. Cloud-based APIs, even with encryption and data-deletion assertions, may not satisfy audit requirements or legal obligations in certain jurisdictions. In these cases, the agent architecture must be designed to keep the full inference pipeline local while still benefiting from cloud-based observability and control planes, where appropriate, via segregated connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency is a direct measure of operational usability.&lt;/strong&gt; In manufacturing plants, field service operations, retail branches, or other environments where agents serve human users on the shop floor or remote locations, response time is not a performance metric—it is a functional requirement that affects whether the agent is used at all. When users are waiting for a troubleshooting recommendation or a work instruction, a response that takes tens of seconds to traverse cloud networks is often abandoned. Local inference, combined with local agent orchestration, ensures that the slowest part of the response pipeline is your own internal network and compute capacity, not external connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connectivity cannot be assumed to be always available and high-bandwidth.&lt;/strong&gt; Many operational environments have constrained connectivity: scheduled outbound traffic windows, rate-limited connections, air-gapped subnets, or intentional network fragmentation for security isolation. The agent needs to function usefully within these constraints rather than degrade into a pass-through to cloud APIs. Azure Local supports this by enabling local execution and local state, while Arc provides a control-plane integration path when connectivity is available, rather than requiring continuous connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You want cloud-native operational practices applied on‑premises.&lt;/strong&gt; This includes containerized deployments, Kubernetes orchestration for workload management, infrastructure-as-code for reproducibility, GitOps-driven delivery pipelines, policy enforcement at the runtime boundary, and standardized telemetry and logging. These practices are not exclusive to cloud deployments; they provide the same benefits on‑premises—clear separation of concerns, predictable deployments, and auditability—but require an infrastructure platform like Azure Local to realize them consistently.&lt;/p&gt;
&lt;h3&gt;
  
  
  When this pattern becomes problematic
&lt;/h3&gt;

&lt;p&gt;Reconsidering a local-first architecture is warranted in several practical scenarios. If your inference workload demands elastic horizontal scaling and you cannot predict peak capacity without overprovisioning on-premises infrastructure, then chasing elastic scale with local hardware becomes economically and operationally inefficient. Building auto-scaling logic that manages standby capacity across stateful models would contradict the efficiency argument for locality. Similarly, if your operational environment requires production-grade stability guarantees from the inference API layer with minimal risk of breaking changes between deployments, the current maturity of local inference runtimes (such as Foundry Local, which remains in preview) presents a material risk. Preview components introduce uncertainty regarding backward compatibility, performance-tuning recommendations, and troubleshooting depth, which may not align with production SLAs. Finally, if the problem you are solving is fundamentally deterministic—where steps follow a fixed sequence, validation rules are static, and branching logic is known in advance—a structured workflow orchestration tool or a conventional microservice often provides clearer observability, simpler debugging, and lower operational overhead than an agent. Not every problem with tools and state management requires agentic behavior; sometimes explicit choreography is both simpler and more reliable.&lt;/p&gt;

&lt;p&gt;These are the constraints that inform the "whether" decision. The next section moves to the "why Azure Local" specifically, grounded in use-case context rather than abstract on-premises philosophy.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Azure Local makes sense here (the use case drives locality)
&lt;/h2&gt;

&lt;p&gt;Azure Local is not the point of the architecture. It is the platform choice that becomes rational when the &lt;strong&gt;agent pattern has to follow the environment&lt;/strong&gt;: where data and tools live, what network rules allow, what latency targets are required, and what failure modes are acceptable.&lt;/p&gt;
&lt;h3&gt;
  
  
  1) The agent needs to live where the tools and data already are
&lt;/h3&gt;

&lt;p&gt;High‑value agents are typically tool-heavy, and the distribution of that tooling directly affects where the agent runtime should run. The model call itself—the inference step that generates a response — is only one part of the agent interaction. The larger portion of the interaction involves retrieving documents from internal repositories, querying operational databases, validating business rules and constraints, and writing outcomes back to systems of record. Each of these operations carries a latency cost, integration overhead, and often data governance implications.&lt;/p&gt;

&lt;p&gt;When the authoritative data sources and the systems that perform work live on‑premises—whether that is an ERP system, a manufacturing execution system, a document repository, or a service dispatch platform—moving the agent runtime closer to those systems becomes pragmatically necessary rather than architecturally optional. A remote agent calling back into on‑premises tools over the network incurs not only the latency of each call but also the operational complexity of maintaining secure, reliable network pathways between cloud and on‑premises infrastructure, managing retry logic for transient failures across that boundary, and reasoning about whether a failure in the agent's response came from the model inference or from a tool integration issue.&lt;/p&gt;

&lt;p&gt;Placing the agent runtime on‑premises reduces integration complexity by collapsing tool interactions into local function calls with minimal network hops. It also materially shrinks the trust boundary. Data that would otherwise traverse a cloud service boundary—even with encryption in transit and assertions of deletion—can remain inside the perimeter where it originated. Azure Local provides a consistent, repeatable substrate on which to host the runtime within the organizational boundary while still enabling cloud-native operational practices such as containerization, orchestration, and declarative configuration management that teams have come to expect.&lt;/p&gt;
&lt;h3&gt;
  
  
  2) Latency is a functional requirement, not a nice-to-have
&lt;/h3&gt;

&lt;p&gt;In operational scenarios, predictable response time is not an optimization target—it is a functional requirement embedded in the task itself. When a field technician, floor supervisor, or support worker invokes an agent for a troubleshooting recommendation or work instruction, they are typically performing a task that cannot proceed until they receive guidance. A response that arrives within seconds fits naturally into human workflow and decision-making; the user can act on it immediately and move forward. A response that takes tens of seconds—or worse, becomes non-deterministic depending on cloud API load—exceeds the mental context window of the task. Users abandon the agent, fall back to phone calls or manual lookups, or proceed without the agent's input entirely, making the agent operationally irrelevant regardless of its intelligence.&lt;/p&gt;

&lt;p&gt;The latency problem compounds when the agent's response is not a single inference call. A typical operational agent orchestrates multiple steps: retrieving context from a document repository, querying a database to validate prerequisites, calling an external service to fetch the current state, and then synthesizing a response. Each of these operations incurs round-trip time. When those dependencies live on-premises, and the agent runtime lives in a cloud region thousands of kilometers away, the baseline latency floor is determined by geography and internet backbone capacity, not by the execution speed of any individual component. You cannot optimize away the speed of light or your ISP's rate limiting. Placing the agent runtime and its tooling in the same local environment—where internal networks typically offer latency in the single-digit millisecond range—ensures that the slowest element becomes your own infrastructure capacity, which you can measure, predict, and scale. This transforms latency from an externality you absorb to a variable you control.&lt;/p&gt;

&lt;p&gt;Azure Local supports this placement strategy by providing AKS-hosted agent services and local model-serving infrastructure in a shared operational footprint. The inference engine, the agent orchestration layer, and the tool integrations all run in the same data center or facility where the authoritative systems live. This collapse of distance translates directly into a collapse of latency, which translates into usability in environments where response time affects task completion.&lt;/p&gt;
&lt;h3&gt;
  
  
  3) Connectivity constraints are a design input
&lt;/h3&gt;

&lt;p&gt;Many environments are not "cloud-connected" as cloud reference architectures assume. The assumption embedded in most cloud-native architecture guidance is that outbound connectivity is available, reliable, and incurs acceptable latency and throughput. In practice, many operational environments operate under very different constraints. Outbound traffic to public cloud endpoints may be restricted by security policy or rate-limited by egress gateways. Connectivity may be scheduled—available only during specific windows or subject to maintenance blackouts. In other cases, network segments may be deliberately disconnected by design: operations technology networks in manufacturing facilities, isolated domains in financial institutions, or intentionally air-gapped environments in highly regulated sectors all follow this pattern. Even when connectivity exists, it may be mediated by proxies, firewalls, or VPNs, adding latency and complexity to troubleshooting when the agent's inference or tool calls fail.&lt;/p&gt;

&lt;p&gt;Azure Local enables local execution of the agent runtime and inference engine regardless of whether upstream cloud connectivity is available. Simultaneously, it aligns with Azure's control-plane concepts and governance models via Azure Arc when connectivity is available. This dual capability means you can design and operate an agent system that functions reliably in disconnected or intermittently-connected scenarios without abandoning cloud-native operational practices. When connectivity is available, Arc can be used for centralized observability, policy enforcement, and update orchestration. When connectivity is unavailable, the local agent continues to function using local tools and data. This gives you an operational path that respects the actual constraints of your environment rather than forcing an architecture that assumes away those constraints or requires workarounds to compensate for them.&lt;/p&gt;
&lt;h3&gt;
  
  
  4) You can keep cloud-native operations without reinventing on‑prem deployment
&lt;/h3&gt;

&lt;p&gt;Teams generally want repeatable delivery, policy enforcement, and consistent observability. The conventional tension between on-premises deployments and cloud-native operations has historically forced a false choice: either accept the operational discipline and automation of cloud platforms at the cost of moving workloads outside your perimeter, or keep infrastructure on-premises and revert to manual configuration management, bespoke deployment scripts, and fragmented observability tooling.&lt;/p&gt;

&lt;p&gt;Azure Local plus AKS on Azure Local severs that coupling. Containerized deployments, GitOps-driven configuration management, Kubernetes namespaces, and declarative rollout strategies work identically whether your agent runtime is in a public cloud region or in your own data center. The infrastructure boundary becomes transparent to operational practices. Teams can maintain the same deployment pipelines, policy engines, and observability systems they have built for cloud workloads and apply them without modification to on-premises clusters. This continuity of tooling and process significantly reduces the operational friction that typically accompanies on-premises agent deployments. The "local" decision becomes a deployment location decision—a choice about where to run proven, familiar infrastructure patterns—rather than a return to bespoke server management, manual patching, and isolated monitoring infrastructure that would otherwise characterize traditional on-premises deployments.&lt;/p&gt;
&lt;h3&gt;
  
  
  5) Local inference forces you to manage capacity and hardware intentionally
&lt;/h3&gt;

&lt;p&gt;If inference is local, capacity planning and acceleration hardware become first-class concerns that demand explicit decision-making rather than outsourced abstraction. When inference runs in a public cloud service, capacity is nominally infinite—or at least, the perception of infinity is maintained through multi-tenancy and auto-scaling tiers that obscure the underlying hardware realities. Costs accumulate by token count and API call frequency, but the physical infrastructure remains opaque. The tradeoff is acceptable if your workload is occasional or bursty; the cost volatility is a known variable you can budget for.&lt;/p&gt;

&lt;p&gt;When inference runs locally, however, the hardware economics become tangible. A single GPU accelerator costs tens of thousands of dollars upfront, requires power and cooling infrastructure, and has a finite lifespan. Acquiring that hardware is no longer a usage-based charge smoothed into monthly billing; it is a capital expenditure that sits in your facility and has opportunity cost. This visibility forces intentional capacity planning: you must understand your typical inference load, peak throughput requirements, model sizes, and acceptable latency percentiles, and then purchase hardware that meets those requirements with some headroom for growth. You cannot simply add capacity by changing a tier or waiting for auto-scaling to provision more instances; you provision intentionally.&lt;/p&gt;

&lt;p&gt;Azure Local provides a platform to run and govern those resources, allowing you to isolate inference nodes, stage updates, and enforce change control without coupling the inference lifecycle to the agent code lifecycle. You can reserve specific nodes for specific models, apply resource quotas to prevent one workload from starving another, and manage hardware refreshes independently from application deployments. This separation of concerns means you can upgrade your inference engine or swap model versions without draining the entire cluster, and you can plan hardware replacement without triggering emergency application refactorings. The operational rigor this imposes is not a burden—it is an alignment of technical decision-making with the actual cost structure of your infrastructure.&lt;/p&gt;
&lt;h3&gt;
  
  
  6) The architecture stays incremental and reversible
&lt;/h3&gt;

&lt;p&gt;By separating agent runtime from model runtime, you establish a deployment boundary that allows you to make infrastructure decisions independently from application logic. This separation is critical in practice because it decouples two sources of change that typically move at different velocities: the agent orchestration layer (tools, workflows, routing, state management) tends to evolve rapidly as teams refine business logic and respond to operational feedback, while the inference runtime makes infrequent but high-impact decisions around model selection, hardware acceleration strategy, and inference node topology that are capital-intensive and difficult to reverse.&lt;/p&gt;

&lt;p&gt;Starting small means you can pilot with a single inference node running a small quantized model, then grow to multiple specialized nodes—some optimized for latency-sensitive operations, others for throughput—without requiring changes to the agent code itself. The agent layer continues to interact with inference through the same OpenAI-compatible API boundary, indifferent to whether a single GPU or a distributed cluster backs that endpoint. You can keep your agent API stable while swapping models; if a new quantization or a different model family becomes available, you can stage it on a secondary node and route traffic to validate behavior before completing the migration. You can change inference node placement by adjusting scheduling constraints or moving nodes between racks without triggering a redeploy of agent services. This mobility is not possible when agent code and inference are tightly coupled—for example, when inference decisions are embedded in application code or when the agent layer depends on model-specific features or tokenization strategies.&lt;/p&gt;

&lt;p&gt;Azure Local supports this incremental expansion by providing a consistent Kubernetes control plane and standard scheduling mechanisms that treat compute resources as fungible. Your initial pilot might span a single machine running AKS on Azure Local in a branch or regional office; as you validate the model and prove business value, you can expand to a small cluster in your primary data center. Each step remains operationally routine because you are not changing how workloads are deployed or managed—you are only changing the scale and distribution of resources. A pilot deployment and a production cluster follow the same GitOps patterns, use the same artifact promotion pipelines, and respond to the same observability signals, allowing you to graduate from proof-of-concept to production without a redesign of your delivery model or a learning curve on unfamiliar operational practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical decision test:&lt;/strong&gt; Azure Local tends to be the right call when most of these are true: the authoritative tools/data are on‑prem, prompts and retrieved context must remain local, latency is a requirement, connectivity is constrained, and you want cloud-native operations in the same footprint.&lt;/p&gt;

&lt;p&gt;With that context, we can move from "why" to "how".&lt;/p&gt;
&lt;h2&gt;
  
  
  Step‑by‑step implementation runbook
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Phase 0 — Define boundaries: agent vs workflow, and what "done" means
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write the outcome in business terms.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Define success in measurable outcomes, not in model features. Examples include reduced downtime, faster triage, fewer escalations, shorter handling time, or improved compliance auditability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Classify steps as agent or workflow.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use an &lt;strong&gt;agent&lt;/strong&gt; for open-ended interpretation, conversational assistance, flexible tool use, and summarization.&lt;/li&gt;
&lt;li&gt;Use a &lt;strong&gt;workflow&lt;/strong&gt; for deterministic steps, routing, approvals, checkpoints, and auditable state transitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Produce a tool inventory and trust boundary map.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For each tool, define authentication, authorization, validation, allowed destinations, and audit requirements.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Teams often prototype by giving agents broad access "to move fast." That security debt becomes expensive later. Start with constrained proxies and allow-lists from day one.&lt;/p&gt;
&lt;h3&gt;
  
  
  Phase 1 — Platform baseline: Azure Local + Arc + AKS on Azure Local
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1.1 Establish baseline assumptions
&lt;/h4&gt;

&lt;p&gt;Decide upfront:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topology: pilot node, datacenter cluster, or distributed sites.&lt;/li&gt;
&lt;li&gt;OS mix: Linux nodes, Windows nodes, or mixed.&lt;/li&gt;
&lt;li&gt;Acceleration: CPU only vs GPU/NPU inference nodes.&lt;/li&gt;
&lt;li&gt;Connectivity mode: connected, constrained, or partially disconnected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Constrained connectivity changes everything about artifact flow. Treat "how will nodes pull images and models?" as a first-class requirement (private registry, artifact promotion, caching).&lt;/p&gt;
&lt;h4&gt;
  
  
  1.2 Build a minimal AKS baseline (repeatable)
&lt;/h4&gt;

&lt;p&gt;Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Namespaces for separation (&lt;code&gt;platform&lt;/code&gt;, &lt;code&gt;agents&lt;/code&gt;, &lt;code&gt;tools&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Ingress and certificate strategy.&lt;/li&gt;
&lt;li&gt;Secrets management strategy.&lt;/li&gt;
&lt;li&gt;Logging/metrics pipeline.&lt;/li&gt;
&lt;li&gt;Network policies and egress controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example namespace baseline:&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;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agents&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pod-security.kubernetes.io/enforce&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;restricted"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Namespace&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tools&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pod-security.kubernetes.io/enforce&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;restricted"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Without early namespace boundaries and baseline policies, your cluster becomes a collection of special cases that are hard to govern and hard to migrate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2 — GitOps delivery (recommended even for pilots)
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2.1 Repository layout pattern
&lt;/h3&gt;

&lt;p&gt;A structure that scales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;clusters/&amp;lt;cluster-name&amp;gt;/&lt;/code&gt; for cluster-specific overlays&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;platform/&lt;/code&gt; for shared add-ons (ingress, monitoring, policy)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;workloads/agents/&lt;/code&gt; for agent services&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;workloads/tools/&lt;/code&gt; for tool proxies and connectors&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2.2 Kustomization pattern (example)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kustomize.toolkit.fluxcd.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Kustomization&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agents&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flux-system&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./workloads/agents/overlays/prod&lt;/span&gt;
  &lt;span class="na"&gt;prune&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;sourceRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GitRepository&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;platform-repo&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; GitOps only reduces drift if "kubectl apply in production" is the exception with a documented break-glass process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3 — Foundational services: state, memory, and observability
&lt;/h3&gt;

&lt;p&gt;Make state explicit and intentional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conversation state&lt;/strong&gt; (threads, session context) belongs in agent stores designed for that purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business state&lt;/strong&gt; (work items, approvals, tickets) belongs in systems of record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common supporting components on AKS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redis for caching and rate limiting&lt;/li&gt;
&lt;li&gt;PostgreSQL (or equivalent) for durable state&lt;/li&gt;
&lt;li&gt;A vector store if you implement local RAG&lt;/li&gt;
&lt;li&gt;OpenTelemetry collector for traces/metrics/logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Agent telemetry can explode. Define retention, sampling, and content redaction policies early. In regulated environments, you often cannot log raw prompts or retrieved text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 4 — Install Foundry Local (preview) on inference nodes
&lt;/h3&gt;

&lt;p&gt;Treat Foundry Local as a managed runtime dependency.&lt;/p&gt;

&lt;h4&gt;
  
  
  4.1 Placement and isolation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Prefer dedicated inference nodes where possible.&lt;/li&gt;
&lt;li&gt;Place them where the acceleration hardware lives.&lt;/li&gt;
&lt;li&gt;Segment networking so AKS can reach them reliably while keeping exposure minimal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4.2 Endpoint discovery (avoid hard-coded ports)
&lt;/h4&gt;

&lt;p&gt;Prefer one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery service pattern:&lt;/strong&gt; publish the current base URL into a config store that your agent services read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway pattern:&lt;/strong&gt; place a stable internal proxy in front of Foundry Local to normalize routing and policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Hard-coded ports work in a lab and fail after reboots, upgrades, or runtime changes. Build discovery or stable routing into the design.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 5 — Network, TLS, and identity between AKS and Foundry Local
&lt;/h3&gt;

&lt;h4&gt;
  
  
  5.1 Connectivity options
&lt;/h4&gt;

&lt;p&gt;Common choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct HTTPS from agent pods to Foundry node IP/DNS&lt;/li&gt;
&lt;li&gt;Internal L4/L7 proxy for stable routing and policy&lt;/li&gt;
&lt;li&gt;Service mesh for mTLS and telemetry (only if you already operate one)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5.2 TLS strategy
&lt;/h4&gt;

&lt;p&gt;Use your standard PKI approach, if possible, and ensure that clients validate certificates by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; "Works with curl -k" is a warning sign, not a milestone. Fix trust chains early so insecure shortcuts do not become permanent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 6 — Implement the inference adapter in your MAF service
&lt;/h3&gt;

&lt;p&gt;Design goal: agent code calls a model client abstraction, not a concrete endpoint.&lt;/p&gt;

&lt;h4&gt;
  
  
  6.1 Configuration pattern (ConfigMap + Secret)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ConfigMap&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent-config&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agents&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;FOUNDRY_BASE_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://foundry-local.internal.example"&lt;/span&gt;
  &lt;span class="na"&gt;FOUNDRY_MODEL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;local-chat-model"&lt;/span&gt;
  &lt;span class="na"&gt;INFERENCE_TIMEOUT_SECONDS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;30"&lt;/span&gt;
  &lt;span class="na"&gt;INFERENCE_MAX_RETRIES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Secret&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent-secrets&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agents&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Opaque&lt;/span&gt;
&lt;span class="na"&gt;stringData&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;FOUNDRY_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;placeholder-if-required-by-client"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deployment consuming it:&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;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maf-agent-api&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agents&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maf-agent-api&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maf-agent-api&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;registry.local/agents/maf-agent-api:1.0.0&lt;/span&gt;
        &lt;span class="na"&gt;envFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;configMapRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent-config&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;secretRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent-secrets&lt;/span&gt;
        &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;250m"&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;512Mi"&lt;/span&gt;
          &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2"&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2Gi"&lt;/span&gt;
        &lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health/ready&lt;/span&gt;
            &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
          &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
          &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6.2 Client policy (timeouts, retries, circuit breakers)
&lt;/h4&gt;

&lt;p&gt;Start with conservative defaults:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timeout: 20–60s depending on model/prompt size&lt;/li&gt;
&lt;li&gt;Retries: 1–2 for transient failures only&lt;/li&gt;
&lt;li&gt;Circuit breaker: open after repeated failures to prevent cascading latency&lt;/li&gt;
&lt;li&gt;Concurrency limits: protect inference nodes from overload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Without explicit backpressure, a single busy agent route can saturate inference and degrade every workload that shares the runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 7 — Tool integration with constrained proxies
&lt;/h3&gt;

&lt;p&gt;Do not give agents direct access to sensitive systems.&lt;/p&gt;

&lt;p&gt;Recommended approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy tool proxy services in a dedicated namespace.&lt;/li&gt;
&lt;li&gt;Restrict outbound connectivity to approved destinations only.&lt;/li&gt;
&lt;li&gt;Enforce authorization, validation, and allow-lists in the proxy.&lt;/li&gt;
&lt;li&gt;Log every invocation with correlation IDs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A default-deny egress policy concept:&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;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NetworkPolicy&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tools-default-deny-egress&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tools&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;podSelector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;
  &lt;span class="na"&gt;policyTypes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Egress&lt;/span&gt;
  &lt;span class="na"&gt;egress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; If you skip network controls early, you will discover "mystery dependencies" later when tools call endpoints that were never approved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 8 — Observability: correlate agent → tools → inference
&lt;/h3&gt;

&lt;p&gt;Minimum requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correlation ID propagated across inbound request, tool calls, inference calls, and response&lt;/li&gt;
&lt;li&gt;Latency breakdown (tool time vs inference time vs orchestration time)&lt;/li&gt;
&lt;li&gt;Error classification by category (tool failure, inference failure, policy block, timeout)&lt;/li&gt;
&lt;li&gt;Token/prompt size metadata if available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Decide what is safe to log. For many environments, metadata and hashes are acceptable, but raw prompts and retrieved snippets are not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 9 — Hardening: safety, governance, regression testing
&lt;/h3&gt;

&lt;p&gt;Hardening checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt and tool regression tests for critical flows&lt;/li&gt;
&lt;li&gt;Golden conversations for validation after runtime updates&lt;/li&gt;
&lt;li&gt;Tool schemas and allow-lists are enforced centrally&lt;/li&gt;
&lt;li&gt;Timeouts on every external call&lt;/li&gt;
&lt;li&gt;Rate limits per user and per route&lt;/li&gt;
&lt;li&gt;Graceful degradation when inference is unavailable (fallback to workflow/human)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Preview inference runtimes can introduce behavior changes that are not "errors" but still break user expectations. Without regression tests, you will find out in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 10 — Operations: versioning, rollouts, and capacity planning
&lt;/h3&gt;

&lt;h4&gt;
  
  
  10.1 Independent update cadencess
&lt;/h4&gt;

&lt;p&gt;Operate on separate cadences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent services: frequent updates via CI/CD&lt;/li&gt;
&lt;li&gt;Inference runtime: cautious updates via staged rollout&lt;/li&gt;
&lt;li&gt;Cluster/platform: regular maintenance windows&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.2 Rollout strategy
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Canary agent changes with a small traffic slice and compares latency/error rates&lt;/li&gt;
&lt;li&gt;Pin inference runtime versions and validate with representative load before expanding rollout&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.3 Capacity planning
&lt;/h4&gt;

&lt;p&gt;Define explicit SLOs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;p95 latency target for a representative prompt&lt;/li&gt;
&lt;li&gt;maximum concurrent sessions per inference node&lt;/li&gt;
&lt;li&gt;acceptable queueing delay under peak load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational gotcha:&lt;/strong&gt; Size for peaks and recovery scenarios. A thundering herd is common when shifts start, sites reconnect, or batch processes trigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical “day‑1 to day‑30” plan
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Day 1–3: Foundation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Define business outcomes and agent/workflow boundaries&lt;/li&gt;
&lt;li&gt;Stand up AKS baseline namespaces, ingress, and GitOps scaffolding&lt;/li&gt;
&lt;li&gt;Deploy telemetry pipeline and basic dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 4–10: Inference integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install Foundry Local on inference nodes&lt;/li&gt;
&lt;li&gt;Implement endpoint discovery and TLS trust&lt;/li&gt;
&lt;li&gt;Add inference adapter in the MAF service with externalized configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 11–20: Tools and data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build constrained tool proxies with allow-lists and audit logs&lt;/li&gt;
&lt;li&gt;Implement retrieval paths that keep data inside the boundary&lt;/li&gt;
&lt;li&gt;Add correlation IDs end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 21–30: Hardening and operations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add regression tests and golden conversations&lt;/li&gt;
&lt;li&gt;Implement rollouts, version pinning, and canary strategy&lt;/li&gt;
&lt;li&gt;Load test and finalize a capacity plan and operational runbooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This stack is not about "on‑prem versus cloud." It is about aligning the agent pattern with the constraints imposed by the use case: data locality, tool proximity, latency targets, and network realities. Azure Local provides a consistent on‑prem platform for that pattern; AKS keeps operations cloud-native; Foundry Local enables local inference; and Agent Framework provides the application layer to build agents and workflows that map to real business outcomes. By following this architecture and implementation runbook, you can deliver production‑grade AI agents that run locally, proving that cloud-native excellence is not constrained by your network boundary.&lt;/p&gt;

</description>
      <category>azurelocal</category>
      <category>foundrylocal</category>
      <category>agents</category>
    </item>
    <item>
      <title>Testing Copilot Agents: When to Use Agent Evaluation vs. the Copilot Studio Kit</title>
      <dc:creator>Holger Imbery</dc:creator>
      <pubDate>Sun, 05 Apr 2026 07:29:14 +0000</pubDate>
      <link>https://dev.to/holgerimbery/testing-copilot-agents-when-to-use-agent-evaluation-vs-the-copilot-studio-kit-4f3e</link>
      <guid>https://dev.to/holgerimbery/testing-copilot-agents-when-to-use-agent-evaluation-vs-the-copilot-studio-kit-4f3e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Microsoft's Agent Evaluation GA announcement on March 31, 2026, update to &lt;a href="https://holgerimbery.blog/testing-copilot-studio-agents-copilot-studio-kit-vs-agent-evaluation-preview" rel="noopener noreferrer"&gt;Testing Copilot Studio Agents: Copilot Studio Kit vs. Agent Evaluation (Preview)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary Lede&lt;/strong&gt; &lt;br&gt;
Agent Evaluation and the Copilot Studio Kit are not competing tools—they represent a layered quality-assurance strategy. Agent Evaluation provides fast, AI-assisted behavioral validation embedded directly in Copilot Studio, ideal for iteration and rapid feedback. The Copilot Studio Kit delivers deterministic, enterprise-grade verification for production gates, compliance, and governance. This article breaks down what each tool does, when to use them, and how to adopt both as your agent quality matures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why read this&lt;/strong&gt;&lt;br&gt;
If you're building or scaling Copilot agents in your organization, you need clarity on testing strategy. This article cuts through the positioning and provides a practical decision framework for when to reach for Agent Evaluation versus the Copilot Studio Kit, with real-world scenarios showing how mature teams layer both tools across their development lifecycle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Microsoft shipped with Agent Evaluation (GA)
&lt;/h2&gt;

&lt;p&gt;On March 31, 2026, Microsoft announced the general availability of Agent Evaluation, marking a significant milestone in Copilot Studio's testing and validation capabilities. Agent Evaluation is now generally available and built directly into Copilot Studio. Its goal is to make agent quality visible, repeatable, and scalable without requiring external tools or setup. This GA release represents the culmination of Microsoft's efforts to democratize agent quality assurance, bringing evaluation capabilities previously limited to advanced setups directly into the hands of everyday agent makers in the Copilot Studio authoring environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core characteristics (as of 31. March 2026)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Integrated directly into the Copilot Studio authoring experience&lt;/strong&gt;&lt;br&gt;
Agent Evaluation is not a separate tool or external service. It lives within the Copilot Studio interface, where agents are built, allowing makers to validate their agents without context-switching or complex integrations. This tight integration reduces friction and encourages frequent validation during development cycles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Designed to answer the production question:&lt;/strong&gt;&lt;br&gt;
"Can we trust this agent to behave correctly, consistently, and safely?"&lt;br&gt;
This core question drives the entire design philosophy. Agent Evaluation focuses on behavioral confidence—whether the agent produces appropriate, consistent, and safe responses across diverse scenarios and user inputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replaces unscalable manual testing and spot‑checking&lt;/strong&gt;&lt;br&gt;
Before Agent Evaluation, agent validation relied heavily on manual testing: individually testing scenarios, reviewing responses, and hoping coverage was adequate. This approach doesn't scale with agent complexity or usage volume. Agent Evaluation automates and scales this process through AI-assisted evaluation and reusable test sets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intended to be used before launch and continuously after changes&lt;/strong&gt;&lt;br&gt;
Agent Evaluation is not a one-time gate. It's designed for continuous validation: before initial launch, before deploying updates, and continuously as conversations flow through production. This shift from ceremonial testing to continuous validation aligns with modern DevOps practices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluation capabilities
&lt;/h3&gt;

&lt;p&gt;Agent Evaluation allows makers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create evaluation sets from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually added questions&lt;/li&gt;
&lt;li&gt;Imported test sets&lt;/li&gt;
&lt;li&gt;AI‑generated queries derived from agent metadata and knowledge sources &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Choose flexible evaluation methods, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exact/partial match&lt;/li&gt;
&lt;li&gt;Semantic similarity&lt;/li&gt;
&lt;li&gt;Intent recognition&lt;/li&gt;
&lt;li&gt;Relevance and completeness scoring &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Mix AI‑generated and human‑defined scenarios to balance breadth and depth&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Reuse evaluations over time and run them via APIs for lifecycle testing&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key framing&lt;/strong&gt;:&lt;br&gt;
Agent Evaluation is positioned as a lightweight, AI‑assisted validation layer that fits naturally into everyday agent authoring and iteration. Unlike heavy external testing frameworks that require context switching and specialized infrastructure, Agent Evaluation operates within Copilot Studio itself, where agents are built. This embedded approach acknowledges that agent makers are iterating rapidly, testing comprehensively at each step, and need validation feedback within their authoring flow rather than as a post-production bottleneck. The AI-assisted scoring means makers don't need to hand-write every test case or define complex rubrics upfront; they can generate relevant test scenarios from their agent's own knowledge sources and metadata, then refine them. This makes evaluation accessible to makers of all skill levels and scales with agent complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Copilot Studio Kit provides for testing
&lt;/h2&gt;

&lt;p&gt;The Copilot Studio Kit (Power CAT) is a separate, solution‑based toolkit that augments Copilot Studio with enterprise‑grade testing, governance, and analytics. Developed by the Microsoft Power CAT (Patterns and Practices) team, the Kit represents a mature, production-ready framework built for organizations requiring rigorous quality assurance, regulatory compliance, and scalable CI/CD integration. While Agent Evaluation addresses everyday iteration and behavioral confidence within the authoring canvas, the Copilot Studio Kit provides the structural backbone for organizations that need deterministic verification, audit trails, multi-layer testing orchestration, and governance enforcement across large deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explicit testing capabilities
&lt;/h3&gt;

&lt;p&gt;The Kit supports structured, deterministic, and multi‑layer testing, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Response Match (exact or conditional text comparison)&lt;/li&gt;
&lt;li&gt;Attachment Match (Adaptive Cards/files)&lt;/li&gt;
&lt;li&gt;Topic Match (requires Dataverse enrichment)&lt;/li&gt;
&lt;li&gt;Generative Answer evaluation using AI Builder and rubrics&lt;/li&gt;
&lt;li&gt;Multi‑turn tests running in a shared conversation context&lt;/li&gt;
&lt;li&gt;Plan Validation for generative orchestration (verifying which tools/actions are invoked, not just what the agent says)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Execution and automation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tests are executed via Copilot Studio APIs (Direct Line)&lt;/li&gt;
&lt;li&gt;Bulk creation and maintenance via Excel import/export&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Detailed run‑level telemetry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pass/fail&lt;/li&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;Observed responses&lt;/li&gt;
&lt;li&gt;Aggregated metrics&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Results can be enriched with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Application Insights&lt;/li&gt;
&lt;li&gt;Dataverse conversation transcripts&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise extensions beyond testing
&lt;/h3&gt;

&lt;p&gt;The Kit also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversation KPIs for Power BI&lt;/li&gt;
&lt;li&gt;Prompt Advisor&lt;/li&gt;
&lt;li&gt;Agent Inventory&lt;/li&gt;
&lt;li&gt;Agent Review Tool&lt;/li&gt;
&lt;li&gt;Compliance Hub with policy enforcement and SLA‑driven reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key framing&lt;/strong&gt;:&lt;br&gt;
The Copilot Studio Kit is built for verification, regression testing, production gates, and governance at scale. Unlike Agent Evaluation's lightweight, AI-assisted approach that lives within the authoring canvas, the Kit functions as an enterprise testing backbone designed for organizations that require deterministic verification, full audit trails, and regulatory compliance enforcement. It bridges the gap between development-time validation and production-readiness, enabling structured quality gates that align with enterprise DevOps pipelines. The Kit's emphasis on exact response matching, topic validation, and orchestration plan verification makes it essential for mission-critical deployments where agent behavior must be predictable, traceable, and compliant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Direct comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Agent Evaluation (GA)&lt;/th&gt;
&lt;th&gt;Copilot Studio Kit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where it lives&lt;/td&gt;
&lt;td&gt;Built into Copilot Studio UI&lt;/td&gt;
&lt;td&gt;Separate Power CAT solution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary purpose&lt;/td&gt;
&lt;td&gt;Behavioral validation&lt;/td&gt;
&lt;td&gt;Functional verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup effort&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Higher (Dataverse, AI Builder, App Insights optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test creation&lt;/td&gt;
&lt;td&gt;Manual, import, AI‑generated&lt;/td&gt;
&lt;td&gt;Manual + Excel bulk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI‑assisted scoring&lt;/td&gt;
&lt;td&gt;Yes (core feature)&lt;/td&gt;
&lt;td&gt;Yes (Generative Answers via AI Builder)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deterministic checks&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Strong (exact match, topic, attachments)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi‑turn scenarios&lt;/td&gt;
&lt;td&gt;Not explicitly documented&lt;/td&gt;
&lt;td&gt;Explicitly supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestration plan validation&lt;/td&gt;
&lt;td&gt;Not documented&lt;/td&gt;
&lt;td&gt;Explicitly supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD &amp;amp; quality gates&lt;/td&gt;
&lt;td&gt;Implicit / API‑based&lt;/td&gt;
&lt;td&gt;Explicit pipeline integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance &amp;amp; compliance&lt;/td&gt;
&lt;td&gt;Not in scope&lt;/td&gt;
&lt;td&gt;First‑class feature&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How they relate (this is the key insight)
&lt;/h2&gt;

&lt;p&gt;Microsoft is not replacing the Copilot Studio Kit with Agent Evaluation.&lt;br&gt;
Instead, the sources show a clear layering strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent Evaluation&lt;br&gt;
→ Fast, AI‑assisted, in‑product validation&lt;br&gt;
→ Ideal for early feedback, iteration, and continuous confidence&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copilot Studio Kit&lt;br&gt;
→ Deep, deterministic, automatable verification&lt;br&gt;
→ Ideal for release gates, regression testing, orchestration correctness, and governance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This positioning is also explicitly reflected in community and Microsoft guidance that frames Agent Evaluation as filling the gap that manual testing cannot scale, while the Kit remains the system‑level quality backbone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical takeaway for enterprise teams
&lt;/h2&gt;

&lt;p&gt;Based on what is explicitly documented:&lt;/p&gt;

&lt;h3&gt;
  
  
  When to use each tool
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Agent Evaluation&lt;/strong&gt; is best suited for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rapid iteration cycles during agent development&lt;/li&gt;
&lt;li&gt;Early-stage quality validation before formal review&lt;/li&gt;
&lt;li&gt;Continuous behavioral checks without infrastructure complexity&lt;/li&gt;
&lt;li&gt;Scenarios where AI-assisted, semantic evaluation is sufficient&lt;/li&gt;
&lt;li&gt;Teams prioritizing speed of feedback over deterministic guarantees&lt;/li&gt;
&lt;li&gt;Questions like: "Is this agent generally behaving well after my last change?"
→ Use Agent Evaluation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Copilot Studio Kit&lt;/strong&gt; is best suited for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production release gates and formal deployment approval&lt;/li&gt;
&lt;li&gt;Regression testing before pushing updates to production&lt;/li&gt;
&lt;li&gt;Regulatory and compliance-driven scenarios requiring audit trails&lt;/li&gt;
&lt;li&gt;Mission-critical agents where deterministic verification is mandatory&lt;/li&gt;
&lt;li&gt;Complex orchestration scenarios requiring plan and tool invocation validation&lt;/li&gt;
&lt;li&gt;Multi-turn conversations that need end-to-end correctness&lt;/li&gt;
&lt;li&gt;Questions like: "Did we break anything? Are the topics correct? Are the tools invoked? Can this ship?"
→ Use the Copilot Studio Kit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How they complement each other
&lt;/h3&gt;

&lt;p&gt;In mature setups, the tools are complementary, not competitive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Development phase&lt;/strong&gt;: Agent Evaluation provides fast feedback loops for iteration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-production phase&lt;/strong&gt;: Copilot Studio Kit enforces deterministic verification gates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production phase&lt;/strong&gt;: Both tools support continuous monitoring—Agent Evaluation for behavioral trends, the Kit for functional regression detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance phase&lt;/strong&gt;: The Kit's compliance and KPI tracking provide the enterprise audit trail and policy enforcement layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations scaling from single-agent projects to enterprise deployments should expect to adopt both tools at different maturity stages, using them in sequence rather than as either/or choices.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Agent Evaluation and the Copilot Studio Kit represent Microsoft's thoughtful answer to the agent testing maturity curve. As organizations build, iterate, and scale agents from proof-of-concept to mission-critical systems, both tools play essential roles at different stages of the lifecycle.&lt;/p&gt;

&lt;p&gt;Agent Evaluation brings quality validation into the authoring experience, reducing friction in everyday iteration and making behavioral confidence accessible to all agent makers. Its AI-assisted approach acknowledges the reality of rapid development cycles and the need for fast feedback loops.&lt;/p&gt;

&lt;p&gt;The Copilot Studio Kit, by contrast, provides the deterministic backbone that enterprises require—exact verification, governance enforcement, regulatory compliance, and the audit trails necessary for mission-critical deployments.&lt;/p&gt;

&lt;p&gt;The key insight is that these tools are not competitors but complementary. Teams should adopt them in sequence, starting with Agent Evaluation during development for rapid iteration, then layering in the Copilot Studio Kit as the agent approaches production. Organizations serious about agent quality at scale will ultimately adopt both, using them to build confidence at every stage from ideation to production and beyond.&lt;/p&gt;

</description>
      <category>copilotstudio</category>
      <category>agents</category>
      <category>agentevaluation</category>
    </item>
  </channel>
</rss>
