<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Azure with AJ</title>
    <description>A blog by an Azure, DevOps and AI enthusiast, sharing valuable insights and expertise.</description>
    <link>https://azurewithaj.com/</link>
    <atom:link href="https://azurewithaj.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 12 Jul 2026 20:20:48 +0000</pubDate>
    <lastBuildDate>Sun, 12 Jul 2026 20:20:48 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
      <item>
        <title>Azure DevOps vs GitHub: Your 2026 Platform Decision</title>
        <description>&lt;p&gt;The question I get asked more than almost any other right now is deceptively simple. Azure DevOps vs GitHub, which one should we be standing on in 2026? It used to be a tooling preference. After Microsoft Build 2026, it is a strategy decision.&lt;/p&gt;

&lt;p&gt;The short version is that both platforms are alive and supported, but only one of them is where the future is being built. If you read the Microsoft Build 2026 announcements closely, Microsoft drew a line as clean as a lightsaber cut. GitHub is the home of agentic development, and Azure DevOps is the stable, well supported workhorse that keeps doing its job without chasing the frontier.&lt;/p&gt;

&lt;p&gt;This post unpacks what was actually announced, what it means for your teams, and how to plan a migration that does not blow up your delivery in the process. No hype, just the practical read.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; is now the agent native control centre for planning, coding, review, security, and agents.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Azure DevOps&lt;/strong&gt; continues with incremental improvements, with Microsoft committed to improving code quality in pull requests and helping developers remediate security issues faster. Boards, Pipelines, and Test Plans are not going anywhere.&lt;/li&gt;
  &lt;li&gt;Microsoft recommends a &lt;strong&gt;hybrid model&lt;/strong&gt;, GitHub repositories with optional Azure DevOps orchestration.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Enterprise Live Migrations (ELM)&lt;/strong&gt; now enable low downtime repository moves from Azure DevOps to GitHub.&lt;/li&gt;
  &lt;li&gt;Azure DevOps basic usage rights are included with &lt;strong&gt;GitHub Enterprise&lt;/strong&gt;, so you are not paying twice to run both.&lt;/li&gt;
  &lt;li&gt;The industry is shifting from DevOps to &lt;strong&gt;Agentic DevOps&lt;/strong&gt;, and your platform choice should reflect that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-real-difference-in-2026&quot;&gt;The Real Difference in 2026&lt;/h2&gt;

&lt;p&gt;For years the comparison was feature for feature. Repos, pipelines, boards, artefacts. Both platforms covered the basics, so teams picked based on history, cost and habit. That framing is now out of date.&lt;/p&gt;

&lt;p&gt;The real difference today is intent. GitHub is being built as an AI native platform where agents are first class participants in the software lifecycle. Azure DevOps is being maintained as a mature, predictable suite that prioritises stability over novelty. Neither position is wrong, but they pull in different directions.&lt;/p&gt;

&lt;p&gt;If your strategy depends on AI agents doing meaningful work across planning, code, and review, the gap between the two platforms is now wide and growing.&lt;/p&gt;

&lt;h2 id=&quot;what-microsoft-really-announced-at-build-2026&quot;&gt;What Microsoft Really Announced at Build 2026&lt;/h2&gt;

&lt;p&gt;Build 2026 was not subtle about direction. The headline was that GitHub is the home of agentic development, and the rest of the announcements reinforced it.&lt;/p&gt;

&lt;h3 id=&quot;the-github-copilot-app-as-the-control-centre&quot;&gt;The GitHub Copilot App as the Control Centre&lt;/h3&gt;

&lt;p&gt;The standout was the GitHub Copilot app positioned as the agent native control centre. Instead of treating agents as a feature bolted onto an editor, the Copilot app becomes the place where you assign work, watch agents collaborate, review their output, and ship the result.&lt;/p&gt;

&lt;p&gt;This builds directly on the Agent HQ vision I covered in &lt;a href=&quot;https://azurewithaj.com/welcome-home-agents&quot;&gt;Welcome Home, Agents&lt;/a&gt;. The difference in 2026 is maturity. What felt experimental last year now feels like the default way of working.&lt;/p&gt;

&lt;h3 id=&quot;github-gets-the-newest-capabilities-first&quot;&gt;GitHub Gets the Newest Capabilities First&lt;/h3&gt;

&lt;p&gt;The pattern across the announcements was consistent. The newest capabilities across planning, coding, review, security, and agents land on GitHub first. Agentic planning, autonomous code review, security remediation by agents, and tighter agent collaboration are all GitHub stories.&lt;/p&gt;

&lt;p&gt;This is the part engineering leaders need to sit with. It is not that Azure DevOps is being switched off. It is that the innovation budget is clearly pointed at GitHub.&lt;/p&gt;

&lt;h3 id=&quot;azure-devops-keeps-calm-and-carries-on&quot;&gt;Azure DevOps Keeps Calm and Carries On&lt;/h3&gt;

&lt;p&gt;Azure DevOps was not abandoned, and that matters. Microsoft confirmed continued investment, with a clear focus on improving code quality in pull requests and helping developers remediate security issues faster, rather than chasing new frontier features.&lt;/p&gt;

&lt;p&gt;Critically, teams can keep using Azure Boards, Azure Pipelines, and Azure Test Plans. If those tools fit how your organisation runs, you are not being forced off them. They remain supported, hardened, and dependable.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Microsoft Build 2026] --&amp;gt; B[GitHub: Agentic Future]
    A --&amp;gt; C[Azure DevOps: Stable Workhorse]
    B --&amp;gt; D[Copilot App Control Centre]
    B --&amp;gt; E[Newest Capabilities First]
    C --&amp;gt; F[Security and Code Quality]
    C --&amp;gt; G[Boards, Pipelines, Test Plans]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style C fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style G fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;when-to-use-each-platform&quot;&gt;When to Use Each Platform&lt;/h2&gt;

&lt;p&gt;So how do you choose? Rather than a religious war, think about where each platform earns its place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lean towards GitHub when you want to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Put AI agents at the centre of planning, coding, and review&lt;/li&gt;
  &lt;li&gt;Adopt new capabilities as soon as they ship&lt;/li&gt;
  &lt;li&gt;Standardise on a single platform for code, security, and collaboration&lt;/li&gt;
  &lt;li&gt;Attract engineers who expect a modern, agent native experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stay comfortable with Azure DevOps when you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Rely heavily on Azure Boards for established planning and reporting&lt;/li&gt;
  &lt;li&gt;Have mature, business critical Azure Pipelines you do not want to disturb&lt;/li&gt;
  &lt;li&gt;Depend on Azure Test Plans for structured, manual test management&lt;/li&gt;
  &lt;li&gt;Need a stable surface while you plan a measured transition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest summary is this. GitHub is where you invest for the future, and Azure DevOps is where you protect what already works. This is not about choosing a hero and a villain, both have a job to do.&lt;/p&gt;

&lt;h2 id=&quot;the-industry-shift-devops-to-agentic-devops&quot;&gt;The Industry Shift: DevOps to Agentic DevOps&lt;/h2&gt;

&lt;p&gt;None of this happens in a vacuum. The bigger story is the shift from DevOps to Agentic DevOps, a theme I have been tracking since &lt;a href=&quot;https://azurewithaj.com/devops-dead-or-evolved&quot;&gt;DevOps: Dead or Evolved&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Traditional DevOps automated the pipeline. Agentic DevOps puts intelligent agents inside the workflow, taking on planning, code changes, reviews, and remediation as active collaborators.&lt;/p&gt;

&lt;p&gt;When you frame Azure DevOps vs GitHub through that lens, the choice becomes clearer. You are not just picking a repository host. You are deciding how ready your platform is for agents to do real work.&lt;/p&gt;

&lt;h2 id=&quot;a-pragmatic-hybrid-migration-path&quot;&gt;A Pragmatic Hybrid Migration Path&lt;/h2&gt;

&lt;p&gt;Here is the reassuring part. You do not have to rip and replace. Microsoft is recommending a hybrid model, and it is genuinely sensible.&lt;/p&gt;

&lt;p&gt;The pattern is GitHub repositories for code, security, and agents, with optional Azure DevOps orchestration where Pipelines or Boards still add value. Your source of truth moves to GitHub, while the orchestration you trust keeps running until you are ready to consolidate.&lt;/p&gt;

&lt;p&gt;Two announcements make this practical. First, Azure DevOps basic usage rights are included with GitHub Enterprise, so running both during a transition does not double your bill. Second, Enterprise Live Migrations now enable low downtime repository migration from Azure DevOps to GitHub, which removes the classic fear of a big bang cutover.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    A[Azure DevOps Today] --&amp;gt; B[Hybrid Phase]
    B --&amp;gt; C[GitHub Native]
    B --&amp;gt; D[GitHub Repos and Agents]
    B --&amp;gt; E[Optional ADO Pipelines and Boards]

    style A fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style B fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style C fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A migration that respects your delivery looks roughly like this.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Assess and prioritise.&lt;/strong&gt; Map your repositories, pipelines, and boards, then rank them by risk and value.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Move code first.&lt;/strong&gt; Use Enterprise Live Migrations to bring repositories across with low downtime, starting with lower risk projects.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Run hybrid deliberately.&lt;/strong&gt; Keep Azure Pipelines or Boards orchestrating while the team settles into GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Introduce agents.&lt;/strong&gt; Turn on agentic planning, coding, and review in the Copilot app on the migrated repositories.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Consolidate when ready.&lt;/strong&gt; Retire the Azure DevOps surfaces you no longer need, on your timeline, not a forced one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is momentum without disruption. You gain the agentic capabilities of GitHub while protecting the orchestration your teams rely on.&lt;/p&gt;

&lt;h2 id=&quot;key-insights-for-engineering-leaders&quot;&gt;Key Insights for Engineering Leaders&lt;/h2&gt;

&lt;p&gt;A few takeaways are worth holding onto.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;This is a strategy call, not a tooling preference.&lt;/strong&gt; The platforms now point in different directions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Stability and innovation are both valid.&lt;/strong&gt; Azure DevOps stability is a feature, not a consolation prize.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hybrid is the responsible default.&lt;/strong&gt; It lets you adopt the future without betting the quarter on a migration.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Agents change the value equation.&lt;/strong&gt; The sooner your code lives where agents are first class, the sooner your teams feel the lift.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion-and-next-steps&quot;&gt;Conclusion and Next Steps&lt;/h2&gt;

&lt;p&gt;Azure DevOps vs GitHub in 2026 is not really a contest of features. It is a question of where you want your engineering organisation to be standing as agentic development becomes the norm.&lt;/p&gt;

&lt;p&gt;Build 2026 made the answer plain. GitHub is the agent native future, Azure DevOps is the dependable present, and the hybrid path lets you honour both. Start by mapping your estate, pick a low risk repository, and try a live migration with agents switched on. Let the results make the case, because do or do not when it comes to agents, the teams that commit are the ones the Force favours.&lt;/p&gt;

&lt;p&gt;For the wider context on this shift, the official &lt;a href=&quot;https://news.microsoft.com/build-2026-live-blog/&quot; target=&quot;\_blank&quot; rel=&quot;noopener&quot;&gt;Microsoft Build&lt;/a&gt; announcements and the &lt;a href=&quot;https://devblogs.microsoft.com/devops/azure-devops-and-github-journeying-into-the-ai-era/&quot; target=&quot;\_blank&quot; rel=&quot;noopener&quot;&gt;Azure DevOps and GitHub AI Era article&lt;/a&gt; are the best places to go deeper.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Are you planning a move from Azure DevOps to GitHub, or running a hybrid setup already? Share your experiences and questions in the comments below, I would love to hear how your teams are approaching it.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 08 Jun 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/azure-devops-vs-github-build-2026/</link>
        <guid isPermaLink="true">https://azurewithaj.com/azure-devops-vs-github-build-2026/</guid>
        
        <category>azure</category>
        
        <category>devops</category>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agentic</category>
        
        <category>ci/cd</category>
        
        <category>migration</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>How to Organise GitHub Copilot Customisations at Scale</title>
        <description>&lt;p&gt;If you’re trying to organise GitHub Copilot customisations across an enterprise, the hardest part usually is not creating the agent or the skill. It’s deciding where everything should live, how it should be shared, and which pieces should appear automatically versus stay self serve.&lt;/p&gt;

&lt;p&gt;After untangling this for my own org, and losing a few hours to one buried prerequisite, I landed on a pattern that is simple enough to operate and structured enough to scale. One source of truth for every customisation, automatic distribution for agents, and marketplace with self serve for everything else.&lt;/p&gt;

&lt;p&gt;This post focuses on that operating model. It is not a full catalogue of every Copilot customisation feature, but a practical pattern for organising them in a way platform teams can actually manage.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;two repositories&lt;/strong&gt; with &lt;strong&gt;automation&lt;/strong&gt; connecting them. A central &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; repository holds every supported customisation, and acts as your &lt;strong&gt;Copilot plugin marketplace&lt;/strong&gt;. A second repository named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; distributes a curated set of approved agents automatically to every user. A GitHub Actions workflow syncs and flattens those agents on merge, while plugins remain available through the marketplace for optional install.&lt;/p&gt;

&lt;p&gt;I validated the behaviour described here against GitHub Copilot enterprise features available in May 2026, because this area is moving quickly and the finer points of distribution can change.&lt;/p&gt;

&lt;h2 id=&quot;the-confusion-nobody-talks-about&quot;&gt;The Confusion Nobody Talks About&lt;/h2&gt;

&lt;p&gt;GitHub Copilot has quietly grown a sprawling customisation surface. In the last year alone we’ve gained:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Custom agents (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Instruction files (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.instructions.md&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;copilot-instructions.md&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Skills (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; bundles)&lt;/li&gt;
  &lt;li&gt;Hooks&lt;/li&gt;
  &lt;li&gt;Plugins and plugin marketplaces&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; for shared project context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one has its own discovery rules. Some are repo scoped, some are user scoped, some are org scoped, and some only appear if you enable a setting buried three menus deep. Teams end up with customisations scattered across personal directories, workspaces, teams channels, and probably some other hidden treasure trove nobody can find.&lt;/p&gt;

&lt;p&gt;The question I kept asking myself is simple. &lt;strong&gt;Where should this stuff live, and how do I share it across the org without asking every developer to clone five repos?&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-pattern-one-source-of-truth-two-distribution-channels&quot;&gt;The Pattern: One Source of Truth, Two Distribution Channels&lt;/h2&gt;

&lt;p&gt;The answer is to separate &lt;strong&gt;storage&lt;/strong&gt; from &lt;strong&gt;distribution&lt;/strong&gt;. Store everything in one place, then use the right GitHub mechanism to distribute each type.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[agent-platform repo&amp;lt;br/&amp;gt;Source of Truth] --&amp;gt; B[Plugin Marketplace]
    A --&amp;gt; C[Instructions, Skills, Hooks]

    E[.github-private repo&amp;lt;br/&amp;gt;Org Distribution] --&amp;gt; F[Auto-discovered Agents]
    E --&amp;gt; G[settings.json points to plugin marketplace]

    A -.-&amp;gt;|GitHub workflow syncs&amp;lt;br/&amp;gt;agents on merge| E

    F --&amp;gt; H[Developer IDE]
    B --&amp;gt; I[copilot cli or via IDE]
    C --&amp;gt; J[Self-serve via cli or manually]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style E fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style G fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style H fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style I fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style J fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;repo-1-agent-platform-source-of-truth&quot;&gt;Repo 1: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; (Source of Truth)&lt;/h3&gt;

&lt;p&gt;This is where every customisation in your org actually lives. It’s a normal repository, structured however makes sense for your team, and it doubles as a &lt;strong&gt;Copilot plugin marketplace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A workable layout:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;agent-platform/
├── agents/                   # All custom agents (full versioned set)
│   ├── azure-architect/
│   │   ├── azure-architect.agent.md
│   │   └── README.md
│   └── engagement-builder/
├── instructions/             # .instructions.md files
├── skills/                   # Reusable SKILL.md bundles
│   ├── waf-review/
│   │   └── SKILL.md
│   └── bicep-refactor/
├── hooks/                    # Hook scripts
├── plugins/                  # Composable plugins published through the marketplace
└── .github
    ├── plugin
        ├── marketplace.json  # Plugin marketplace manifest
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Everything is versioned, reviewed via pull requests, and owned by a CODEOWNERS rule. This is the repo your platform team curates. Everything else flows from here.&lt;/p&gt;

&lt;h3 id=&quot;repo-2-github-private-automatic-org-distribution&quot;&gt;Repo 2: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; (Automatic Org Distribution)&lt;/h3&gt;

&lt;p&gt;GitHub treats a repository named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; in your organisation as a magic distribution channel for Copilot custom agents. Any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private/agents/&lt;/code&gt; automatically appears in every org member’s IDE agent picker. No cloning, no installing, no settings to flip on the user side.&lt;/p&gt;

&lt;p&gt;This is brilliant, and it has one caveat that will absolutely bite you.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;The flat structure rule&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private/agents/&lt;/code&gt; only supports &lt;strong&gt;top level &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; files&lt;/strong&gt;. Nested folders are ignored. If you put &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private/agents/azure/architect.agent.md&lt;/code&gt;, it will silently fail to surface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; looks like this:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;.github-private/
├── agents/
│   ├── azure-architect.agent.md       # Surfaces automatically
│   ├── engagement-builder.agent.md    # Surfaces automatically
│   └── code-reviewer.agent.md         # Surfaces automatically
└── .github
    ├── copilot
        ├── settings.json              # Pointer to your plugin marketplace in the agent-platform repo
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This repo mirrors a &lt;strong&gt;curated subset&lt;/strong&gt; of what lives in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt;. We can also configure a GitHub workflow to automatically sync agents from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; when they’re merged and approved, eliminating manual copy-paste and ensuring &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; always stays in sync with the source of truth.&lt;/p&gt;

&lt;h2 id=&quot;linking-the-two-repos-via-the-plugin-marketplace&quot;&gt;Linking the Two Repos via the Plugin Marketplace&lt;/h2&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.json&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; is what stitches it all together. It tells Copilot CLI in every org member’s environment where to find your plugin marketplace.&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;extraKnownMarketplaces&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;MARKETPLACE-NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;github&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;repo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;OWNER/REPO&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;enabledPlugins&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;PLUGIN-NAME@MARKETPLACE-NAME&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once enabled, developers using Copilot CLI can browse and install plugins directly from your marketplace:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# List available plugins from the org marketplace&lt;/span&gt;
copilot plugin marketplace browse MARKETPLACE-NAME

&lt;span class=&quot;c&quot;&gt;# Install a plugin&lt;/span&gt;
copilot plugin &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;azure-waf-reviewer@MARKETPLACE-NAME
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For the full marketplace schema and enterprise governance options, see the GitHub docs on &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-plugin-standards&quot;&gt;configuring enterprise plugin standards&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;referencing-skills-and-templates-from-agents&quot;&gt;Referencing Skills and Templates from Agents&lt;/h2&gt;

&lt;p&gt;Because skills and supporting assets live in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt;, your distributed agents need a way to pull them in. Two patterns work well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Raw GitHub URL references&lt;/strong&gt; in the agent definition:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;azure-architect&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Reviews Azure designs against the Well Architected Framework&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

When asked to review an architecture, fetch and apply the WAF review skill:
https://raw.githubusercontent.com/acme/agent-platform/main/skills/waf-review/SKILL.md

Use the bicep refactor skill for any IaC changes:
https://raw.githubusercontent.com/acme/agent-platform/main/skills/bicep-refactor/SKILL.md
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This pattern is simple, but it depends on the consuming environment being able to read those raw URLs. If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; is private, or your enterprise network controls block that access path, package the skill inside a plugin instead. In practice, raw URLs are best for lightweight and openly reachable assets, while plugins are the safer default for governed enterprise distribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plugin bundles&lt;/strong&gt; for anything more complex than a single skill. Bundle the agent, its instructions, skills, and hooks together as a plugin in your marketplace and let developers install the whole package with one command.&lt;/p&gt;

&lt;h2 id=&quot;the-caveat-that-cost-me-hours&quot;&gt;The Caveat That Cost Me Hours&lt;/h2&gt;

&lt;p&gt;Here’s the bit that cost me hours. You can set up &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt;, configure &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.json&lt;/code&gt;, push perfectly formed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; files, and &lt;strong&gt;nothing will appear&lt;/strong&gt;. No error, no warning, no clue.&lt;/p&gt;

&lt;p&gt;The reason: custom agents in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; only surface if your enterprise has explicitly enabled the org for custom agents in &lt;strong&gt;AI controls&lt;/strong&gt;. By default, no org is enabled.&lt;/p&gt;

&lt;p&gt;To turn it on:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Navigate to your enterprise (from the Enterprises page on GitHub.com).&lt;/li&gt;
  &lt;li&gt;At the top of the page, click &lt;strong&gt;AI controls&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;In the &lt;strong&gt;Custom agents&lt;/strong&gt; section, select the &lt;strong&gt;Select organization&lt;/strong&gt; dropdown.&lt;/li&gt;
  &lt;li&gt;Click the organisation that contains your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. The moment you enable the org, agents start appearing in IDEs across your tenant. Full details are in the GitHub docs on &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents#enabling-and-protecting-custom-agents-in-your-enterprise&quot;&gt;preparing for custom agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you remember nothing else from this post, remember this step. It’s the difference between a working rollout and a confusing afternoon staring at empty agent pickers.&lt;/p&gt;

&lt;h2 id=&quot;governance-and-ownership&quot;&gt;Governance and Ownership&lt;/h2&gt;

&lt;p&gt;A pattern this powerful needs a few guardrails.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CODEOWNERS&lt;/strong&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; so every agent change is reviewed by the platform team&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Branch protection&lt;/strong&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; to prevent drift since it’s generated by workflow automation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GitHub workflow&lt;/strong&gt; with automated sync that copies vetted agents from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; on merge, with optional filtering by agent tags or directories&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Workflow approval gates&lt;/strong&gt; so sync only happens after maintainer review (optional but recommended for production orgs)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Versioning&lt;/strong&gt; on all supported copilot customisations so consumers can pin or upgrade deliberately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This mirrors how mature platform teams treat shared infrastructure modules. Agents are infrastructure for developer productivity. Treat them like it.&lt;/p&gt;

&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h2&gt;

&lt;p&gt;The reason teams struggle with Copilot customisations isn’t because the features are bad. It’s because there’s no opinionated guidance on &lt;strong&gt;where things should live&lt;/strong&gt; and &lt;strong&gt;how they should reach developers&lt;/strong&gt;. The pattern I’ve laid out, one &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent-platform&lt;/code&gt; repo as source of truth, one &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; repo for automatic distribution, and a plugin marketplace stitching them together, gives you the best of both worlds. Centralised governance and frictionless adoption.&lt;/p&gt;

&lt;p&gt;If you want to go deeper, the official docs on &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents&quot;&gt;preparing for custom agents&lt;/a&gt; and &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-plugin-standards&quot;&gt;configuring enterprise plugin standards&lt;/a&gt; are essential reading. And if you haven’t yet, check out my earlier post on &lt;a href=&quot;https://azurewithaj.com/agents-as-code-versioned-artifacts/&quot;&gt;Agents as Code&lt;/a&gt; for the philosophy behind treating agents as first class engineering artifacts.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How is your org organising Copilot customisations today? Have you hit the flat structure rule or the AI controls gotcha? Share your war stories in the comments, I would love to hear them.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 17 May 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/organising-copilot-customisations/</link>
        <guid isPermaLink="true">https://azurewithaj.com/organising-copilot-customisations/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>agentic</category>
        
        <category>skills</category>
        
        <category>plugins</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>Agents as Code: Treating AI Agents as Versioned Artifacts</title>
        <description>&lt;p&gt;We version our infrastructure. We version our pipelines. We version our policies. So why are most teams still treating their AI agents like throwaway prompt snippets floating in someone’s clipboard?&lt;/p&gt;

&lt;p&gt;If you’ve been following the Agentic DevOps journey on this blog, you’ll know I’ve been tracking how AI agents are reshaping development workflows. From the &lt;a href=&quot;https://azurewithaj.com/agentic-devops-github-copilot-coding-agent/&quot;&gt;coding agent&lt;/a&gt; to &lt;a href=&quot;https://azurewithaj.com/agentic-workflows-reimagining-automation/&quot;&gt;agentic workflows&lt;/a&gt;, the trajectory has been clear: agents are becoming core development infrastructure, not just fancy autocomplete.&lt;/p&gt;

&lt;p&gt;GitHub Copilot now supports custom agents defined directly in your repository, with full workspace awareness, tool access, and MCP connections. With over 60,000 open source projects already adopting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; files and &lt;a href=&quot;https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/&quot;&gt;GitHub’s analysis of 2,500+ repositories&lt;/a&gt; revealing clear patterns of what works, &lt;strong&gt;agents as code&lt;/strong&gt; is the next evolution of how engineering organisations standardise, govern, and scale AI-assisted workflows.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;Custom agents defined in your repository (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; files in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt;) combined with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; for shared project context are the new standard for embedding AI into development workflows. They’re versioned, reviewed, and shared like any other code artifact. This post covers how to structure them, what governance you gain, and practical patterns for adoption.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-agents-without-anchors&quot;&gt;The Problem: Agents Without Anchors&lt;/h2&gt;

&lt;p&gt;Let’s be real for a second. Right now, most teams are using AI coding assistants in full Wild West mode, everyone has their own prompts, their own mental model, and their own bag of tricks. The result?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Inconsistent behaviour&lt;/strong&gt;: Each developer’s AI writes code in a different style because they prompted it differently&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Knowledge silos&lt;/strong&gt;: That brilliant system prompt your senior engineer crafted lives in their personal settings and walks out the door when they do&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No audit trail&lt;/strong&gt;: When an AI agent breaks something, there’s no traceable instruction set to review&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zero governance&lt;/strong&gt;: Security teams have no visibility into what instructions guide AI behaviour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sound familiar? These are exactly the problems we solved with Infrastructure as Code. Before IaC languages like Terraform, Bicep, Pulumi, and CloudFormation became standard, infrastructure was undocumented folklore and snowflake configurations. We fixed it by codifying everything into versioned, reviewable artifacts. Agents deserve the same treatment.&lt;/p&gt;

&lt;h2 id=&quot;agentsmd-vs-custom-agents-know-the-difference&quot;&gt;AGENTS.md vs Custom Agents: Know the Difference&lt;/h2&gt;

&lt;p&gt;This is the distinction most teams get wrong. Two separate mechanisms exist and they serve fundamentally different purposes.&lt;/p&gt;

&lt;h3 id=&quot;agentsmd-the-operating-manual&quot;&gt;AGENTS.md: The Operating Manual&lt;/h3&gt;

&lt;p&gt;An &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; file at the root of your repository is a &lt;strong&gt;passive, always-on instruction set&lt;/strong&gt; for any AI coding agent. Think of it as a README written for agents instead of humans: build commands, code style, testing instructions, and boundaries that every agent should respect.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gh&quot;&gt;# AGENTS.md&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Setup Commands&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; Install deps: &lt;span class=&quot;sb&quot;&gt;`pnpm install`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Run tests: &lt;span class=&quot;sb&quot;&gt;`pnpm test`&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Code Style&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; TypeScript strict mode, single quotes, no semicolons

&lt;span class=&quot;gu&quot;&gt;## Boundaries&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; Never commit secrets or API keys
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Never edit &lt;span class=&quot;sb&quot;&gt;`node_modules/`&lt;/span&gt; or &lt;span class=&quot;sb&quot;&gt;`vendor/`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Always run lint and test before committing
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It’s &lt;strong&gt;cross-platform&lt;/strong&gt; (works across GitHub Copilot, OpenAI Codex, Gemini CLI, Cursor, Windsurf, and more), &lt;strong&gt;nestable&lt;/strong&gt; in monorepos, and stewarded by the &lt;a href=&quot;https://aaif.io/&quot;&gt;Agentic AI Foundation&lt;/a&gt; under the Linux Foundation.&lt;/p&gt;

&lt;h3 id=&quot;custom-agents-githubagents-the-specialist-roles&quot;&gt;Custom Agents (.github/agents/): The Specialist Roles&lt;/h3&gt;

&lt;p&gt;Custom agents in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt; are &lt;strong&gt;active, switchable personas&lt;/strong&gt; you invoke by name. Each &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; file creates a mentionable specialist (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@test-agent&lt;/code&gt;) with its own tools, model preferences, and workflow handoffs.&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;test-agent&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Writes and maintains unit tests for this project&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;editFiles&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;terminal&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;search&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Claude Sonnet 4.5 (copilot)&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

You are a quality software engineer specialising in test coverage.

&lt;span class=&quot;gu&quot;&gt;## Boundaries&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; &lt;span class=&quot;gs&quot;&gt;**Always:**&lt;/span&gt; Write tests to &lt;span class=&quot;sb&quot;&gt;`tests/`&lt;/span&gt;, run tests before committing
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;gs&quot;&gt;**Ask first:**&lt;/span&gt; Before adding new test dependencies
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;gs&quot;&gt;**Never:**&lt;/span&gt; Modify source code in &lt;span class=&quot;sb&quot;&gt;`src/`&lt;/span&gt;, remove failing tests
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These support &lt;strong&gt;tool restrictions per role&lt;/strong&gt;, &lt;strong&gt;model selection per task&lt;/strong&gt;, &lt;strong&gt;workflow handoffs&lt;/strong&gt; between agents, and can be defined at the &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents&quot;&gt;organisation level&lt;/a&gt; for consistency across repositories.&lt;/p&gt;

&lt;h3 id=&quot;how-they-work-together&quot;&gt;How They Work Together&lt;/h3&gt;

&lt;p&gt;The two approaches are &lt;strong&gt;complementary, not competing&lt;/strong&gt;. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; provides the foundational knowledge every agent inherits. Custom agents layer on specialised roles with specific tool access.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[&quot;AGENTS.md&amp;lt;br/&amp;gt;(Always-On Knowledge)&quot;] --&amp;gt; B[&quot;@test-agent&quot;]
    A --&amp;gt; C[&quot;@docs-agent&quot;]
    A --&amp;gt; D[&quot;@lint-agent&quot;]
    A --&amp;gt; E[&quot;@security-agent&quot;]

    B --&amp;gt; F[&quot;Writes Tests&amp;lt;br/&amp;gt;Tools: edit, terminal&quot;]
    C --&amp;gt; G[&quot;Updates Docs&amp;lt;br/&amp;gt;Tools: edit, search&quot;]
    D --&amp;gt; H[&quot;Fixes Style&amp;lt;br/&amp;gt;Tools: edit, terminal&quot;]
    E --&amp;gt; I[&quot;Reviews Security&amp;lt;br/&amp;gt;Tools: search only&quot;]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style F fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style G fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style H fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style I fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The rule of thumb: &lt;strong&gt;if every agent should know it, put it in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;. If only a specific role needs it, put it in a custom agent.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-this-changes-team-workflows&quot;&gt;How This Changes Team Workflows&lt;/h2&gt;

&lt;p&gt;Once agents become versioned artifacts, the way teams work shifts fundamentally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared capabilities replace personal prompts.&lt;/strong&gt; A new developer clones the repo and immediately has access to the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@test-agent&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@docs-agent&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@lint-agent&lt;/code&gt; that everyone else uses, configured precisely for this codebase. No more “ask Sarah how she prompts the AI for tests.” This is the same transformation we saw with CI/CD. Before pipelines as code, builds were manual, inconsistent, and locked in someone’s head. Once they lived in the repo, they became a shared, evolving team asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding becomes instant.&lt;/strong&gt; The agents encode the team’s collective knowledge about how to write tests, structure docs, and review code in this specific codebase. No wiki hunting, no Slack archaeology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents evolve through pull requests.&lt;/strong&gt; Because definitions live in the repo, they follow the same lifecycle as any other code: feature branches for experimentation, PRs with review and discussion, git blame when something goes wrong. Governance you get for free just by putting agents where your code already lives.&lt;/p&gt;

&lt;h2 id=&quot;governance-that-scales&quot;&gt;Governance That Scales&lt;/h2&gt;

&lt;p&gt;For engineering organisations, this is where it gets really interesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security review becomes standard practice.&lt;/strong&gt; Every agent definition includes boundaries stating what it can and cannot do. Security teams review these in the normal PR process, just like IAM policies. The best agent files use a three-tier boundary model:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Always do&lt;/strong&gt;: Safe actions (run tests, write to designated directories)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ask first&lt;/strong&gt;: Actions requiring judgment (schema changes, adding dependencies)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Never do&lt;/strong&gt;: Hard boundaries (commit secrets, modify production configs, delete data)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Organisational standardisation becomes achievable.&lt;/strong&gt; Platform teams maintain base agent templates that project teams inherit and customise. Distribute a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@security-review-agent&lt;/code&gt; across 50 repositories and you’ve rolled out consistent AI-powered security review, versioned and auditable through Git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance gets a paper trail.&lt;/strong&gt; Auditors can review what instructions guided AI behaviour at any point in time, who approved changes, and what boundaries were in place. That’s a significant improvement over the alternative: “some developer typed something into a chat box and the AI did a thing.”&lt;/p&gt;

&lt;h2 id=&quot;lessons-from-2500-repositories&quot;&gt;Lessons from 2,500+ Repositories&lt;/h2&gt;

&lt;p&gt;GitHub’s analysis of over 2,500 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agents.md&lt;/code&gt; files provides concrete, data-backed guidance on what actually makes agents effective:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Specificity wins.&lt;/strong&gt; “You are a test engineer who writes Vitest tests for React 18 using Testing Library, following AAA pattern” beats “You are a helpful assistant” every time.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Commands come first.&lt;/strong&gt; Front-load executable commands (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pnpm test&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm run build&lt;/code&gt;). Agents reference these frequently.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Code examples trump explanations.&lt;/strong&gt; One snippet showing preferred style beats three paragraphs describing it.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cover six core areas.&lt;/strong&gt; Commands, testing, project structure, code style, git workflow, and boundaries. Missing any degrades performance.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Boundaries prevent disasters.&lt;/strong&gt; The always/ask first/never model is the most effective pattern. Without boundaries, agents will eventually surprise you.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What doesn’t work: vague personas, walls of prose with no examples, missing boundaries, and generic instructions that could apply to any project.&lt;/p&gt;

&lt;h2 id=&quot;practical-patterns-to-adopt&quot;&gt;Practical Patterns to Adopt&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Layer both for maximum effect.&lt;/strong&gt; Start with an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; covering build commands, code style, and universal boundaries. Then add focused custom agents for common tasks: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@docs-agent&lt;/code&gt; (read-only source, writes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docs/&lt;/code&gt;), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@test-agent&lt;/code&gt; (writes to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tests/&lt;/code&gt;, runs tests), and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@lint-agent&lt;/code&gt; (style changes only). These are safe, high-value, and easy to validate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iterate through feedback.&lt;/strong&gt; Start minimal, use the agent on real tasks, and when it stumbles, add a specific instruction to prevent it. Commit the improvement through a PR with context. This mirrors how teams refine CI/CD pipelines: the configuration is a living document, not a set-and-forget template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardise at the org and enterprise level.&lt;/strong&gt; GitHub now supports managing custom agents and instructions centrally, not just per repository. Organisation and enterprise owners can define custom agents in a dedicated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github-private&lt;/code&gt; repository, making them &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents&quot;&gt;available across all repositories&lt;/a&gt; within the organisation. Enterprise owners get additional controls, including &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents&quot;&gt;rulesets that restrict who can edit agent profiles&lt;/a&gt; and the ability to delegate management to a team of AI managers.&lt;/p&gt;

&lt;p&gt;On top of that, organisation owners can set &lt;a href=&quot;https://docs.github.com/en/copilot/customizing-copilot/adding-organization-custom-instructions-for-github-copilot&quot;&gt;organisation-level custom instructions&lt;/a&gt; that apply to every Copilot interaction across the organisation. Think of this as the org-wide equivalent of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt; file: coding standards, security requirements, and compliance constraints that every Copilot response respects, regardless of which repository or agent is in use.&lt;/p&gt;

&lt;p&gt;The layering model becomes: &lt;strong&gt;org-level instructions&lt;/strong&gt; (universal standards) → &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt;&lt;/strong&gt; (project-specific context) → &lt;strong&gt;custom agents&lt;/strong&gt; (specialised roles). Teams can still fork and customise, but the baseline is consistent and governed.&lt;/p&gt;

&lt;h2 id=&quot;the-bigger-picture-everything-as-code&quot;&gt;The Bigger Picture: Everything as Code&lt;/h2&gt;

&lt;p&gt;Agents as code is the natural continuation of a decade-long trend:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[&quot;Infrastructure as Code&quot;] --&amp;gt; B[&quot;Pipelines as Code&quot;]
    B --&amp;gt; C[&quot;Policy as Code&quot;]
    C --&amp;gt; D[&quot;Agents as Code&quot;]

    A1[&quot;Terraform, Bicep, Pulumi&quot;] --&amp;gt; A
    B1[&quot;YAML Pipelines, GitHub Actions&quot;] --&amp;gt; B
    C1[&quot;Azure Policy, OPA&quot;] --&amp;gt; C
    D1[&quot;AGENTS.md, .github/agents/&quot;] --&amp;gt; D

    style A fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style A1 fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style B1 fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style C1 fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style D1 fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each evolution followed the same pattern: take something manual and scattered across people’s heads, codify it into versioned artifacts, and gain consistency, auditability, and scalability as a result. Agents as code is the latest application of this principle.&lt;/p&gt;

&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h2&gt;

&lt;p&gt;Treating AI agents as versioned artifacts isn’t just a nice engineering practice. It’s the foundation for scaling AI-assisted development with the same rigour we apply to infrastructure, pipelines, and policies. The tools are here. GitHub Copilot’s custom agents, the open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AGENTS.md&lt;/code&gt; standard, and the patterns emerging from thousands of real-world repositories all point in the same direction: &lt;strong&gt;agents belong in the repo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start small. Define three agents for your most common tasks. Review their boundaries. Iterate when they stumble. Commit improvements through pull requests. Before long, your team’s AI capabilities will be as well-governed and consistently applied as your CI/CD pipelines.&lt;/p&gt;

&lt;p&gt;The era of ad-hoc prompting is ending. The era of agents as code has begun.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you started defining custom agents in your repositories? What patterns have worked for your team? Drop your experiences in the comments, I’d love to hear how others are approaching this.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/&quot;&gt;How to Write a Great agents.md: Lessons from Over 2,500 Repositories&lt;/a&gt; — GitHub Blog&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://agents.md/&quot;&gt;AGENTS.md: A Standard for Guiding Coding Agents&lt;/a&gt; — Agentic AI Foundation / Linux Foundation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/copilot/customization/custom-agents&quot;&gt;Custom Agents in VS Code&lt;/a&gt; — VS Code Documentation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/use-copilot-agents/cloud-agent/create-custom-agents&quot;&gt;Creating Custom Agents for Copilot Cloud Agent&lt;/a&gt; — GitHub Documentation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents&quot;&gt;Preparing to Use Custom Agents in Your Organisation&lt;/a&gt; — GitHub Documentation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents&quot;&gt;Preparing to Use Custom Agents in Your Enterprise&lt;/a&gt; — GitHub Documentation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/customizing-copilot/adding-organization-custom-instructions-for-github-copilot&quot;&gt;Adding Organisation Custom Instructions for GitHub Copilot&lt;/a&gt; — GitHub Documentation&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot&quot;&gt;Adding Repository Custom Instructions for GitHub Copilot&lt;/a&gt; — GitHub Documentation&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 11 Apr 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/agents-as-code-versioned-artifacts/</link>
        <guid isPermaLink="true">https://azurewithaj.com/agents-as-code-versioned-artifacts/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>agentic</category>
        
        <category>devops</category>
        
        <category>ai</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>Agentic Workflows: Reimagining Repository Automation with Natural Language</title>
        <description>&lt;p&gt;Repository automation works well for deterministic tasks, but struggles with work requiring context understanding and adaptive decision-making. When you need to keep documentation synchronised with code, triage issues intelligently, or verify pull requests comply with guidelines, traditional approaches force you to encode all logic upfront using conditionals, regex patterns, and scripts. But real development is messier than any ruleset can capture.&lt;/p&gt;

&lt;p&gt;GitHub Agentic Workflows represent a different approach: describe what you want to happen in natural language, and an AI coding agent reads your instructions, understands your repository context, and takes intelligent actions. This is more than a convenience improvement. Agentic Workflows represent the bridge between “Continuous Integration” and “Continuous AI” - systematic, automated application of intelligence throughout your development lifecycle.&lt;/p&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agentic Workflows&lt;/strong&gt; let you describe automation tasks in plain English instead of complex configuration. An AI coding agent reads your instructions, understands your repository context, and takes intelligent actions. Instead of encoding every path through conditional logic, you describe intent and the agent adapts. This enables powerful automation for nuanced tasks like intelligent issue triage, continuous documentation updates, compliance checking, and code quality improvements. Workflows remain fully auditable and safe with automatic permission scoping and sandboxed execution.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-current-automation-is-still-too-complex&quot;&gt;The Problem: Current Automation is Still Too Complex&lt;/h2&gt;

&lt;p&gt;Before we talk about solutions, let’s acknowledge why existing automation feels limiting.&lt;/p&gt;

&lt;p&gt;Traditional GitHub Actions work well for deterministic tasks. When you know exactly what needs to happen (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if file A changes, run test B&lt;/code&gt;), Actions excels. But real development workflows rarely work that way.&lt;/p&gt;

&lt;p&gt;Consider these practical scenarios:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1: Intelligent Issue Triage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You want to triage new issues automatically, adding appropriate labels, detecting spam, and asking clarifying questions for unclear reports. This requires:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Reading issue content and understanding context&lt;/li&gt;
  &lt;li&gt;Comparing to similar past issues to detect duplicates&lt;/li&gt;
  &lt;li&gt;Making judgment calls about relevance and priority&lt;/li&gt;
  &lt;li&gt;Phrasing helpful feedback that respects first-time contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today, you’d either write complicated shell scripts with regex patterns or abandon automation entirely and do it manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2: Keeping Documentation Current&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code evolves constantly. Documentation doesn’t. You want an agent that runs daily, identifies recent code changes, updates relevant documentation sections, and creates a pull request with those changes. This requires:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Parsing the git diff to understand what changed&lt;/li&gt;
  &lt;li&gt;Finding related documentation files&lt;/li&gt;
  &lt;li&gt;Rewriting sections to reflect new functionality&lt;/li&gt;
  &lt;li&gt;Creating coherent, well-written updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try doing this in traditional Actions: you’re either embedding massive Python scripts or chaining together countless workflow steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 3: Compliance Checking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When pull requests arrive, you want to verify they follow your contribution guidelines. Different PRs need different feedback. Some might be perfect but need a test plan. Others might be off-topic entirely. You need nuanced judgment, not just pattern matching.&lt;/p&gt;

&lt;p&gt;These scenarios share something crucial: they require context understanding and adaptability. They’re not “if X then Y” - they’re “understand the situation, then do what makes sense.”&lt;/p&gt;

&lt;p&gt;This is where agentic workflows shine.&lt;/p&gt;

&lt;h2 id=&quot;what-are-agentic-workflows&quot;&gt;What Are Agentic Workflows?&lt;/h2&gt;

&lt;p&gt;Agentic Workflows are GitHub Actions workflows written in natural language markdown instead of YAML. When triggered, they run an AI coding agent (like GitHub Copilot, Claude Code, or OpenAI Codex) with access to your repository context, allowing it to make intelligent decisions and take meaningful actions.&lt;/p&gt;

&lt;p&gt;The key insight: &lt;strong&gt;Instead of programming every path, you describe the intention and let the agent navigate complexity.&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    A[&quot;Write Markdown&amp;lt;br/&amp;gt;with Instructions&quot;] --&amp;gt; B[&quot;Compile to GitHub&amp;lt;br/&amp;gt;Actions YAML&quot;]
    B --&amp;gt; C[&quot;GitHub Actions&amp;lt;br/&amp;gt;Runs Workflow&quot;]
    C --&amp;gt; D[&quot;AI Coding Agent&amp;lt;br/&amp;gt;Executes Intelligently&quot;]
    D --&amp;gt; E[&quot;Safe Outputs&amp;lt;br/&amp;gt;Create PRs, Comments, Issues&quot;]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;how-agentic-workflows-work&quot;&gt;How Agentic Workflows Work&lt;/h2&gt;

&lt;p&gt;Unlike traditional Actions that execute scripts you write, agentic workflows run AI coding agents that interpret your narrative instructions and decide what to do.&lt;/p&gt;

&lt;h3 id=&quot;the-execution-model&quot;&gt;The Execution Model&lt;/h3&gt;

&lt;p&gt;When an agentic workflow is triggered, here’s what happens:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Frontmatter Configuration&lt;/strong&gt;: The YAML frontmatter defines:
    &lt;ul&gt;
      &lt;li&gt;When the workflow runs (schedule, triggers, permissions)&lt;/li&gt;
      &lt;li&gt;What the agent can access (tools, GitHub permissions)&lt;/li&gt;
      &lt;li&gt;What actions are allowed (safe outputs)&lt;/li&gt;
      &lt;li&gt;Resource constraints (timeouts, network access)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Agent Execution&lt;/strong&gt;: The AI agent reads:
    &lt;ul&gt;
      &lt;li&gt;Your markdown instructions&lt;/li&gt;
      &lt;li&gt;Repository context (files, issues, PRs, discussions)&lt;/li&gt;
      &lt;li&gt;Current situation (what issue/PR triggered the workflow)&lt;/li&gt;
      &lt;li&gt;Available tools and permissions&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tool Usage&lt;/strong&gt;: The agent can use allowed tools like:
    &lt;ul&gt;
      &lt;li&gt;GitHub (read pull requests, issues, discussions, code)&lt;/li&gt;
      &lt;li&gt;File editing (modify code or documentation)&lt;/li&gt;
      &lt;li&gt;Bash scripting (run tests, build, analyse code)&lt;/li&gt;
      &lt;li&gt;Web fetching (research external resources)&lt;/li&gt;
      &lt;li&gt;Model Context Protocol (MCP) servers (integrate external services)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Safe Outputs&lt;/strong&gt;: The agent doesn’t have direct write access. Instead, it uses sanitised “safe outputs”:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;create-pull-request&lt;/code&gt;: Request a PR be created&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add-comment&lt;/code&gt;: Request a comment be added to an issue or PR&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add-labels&lt;/code&gt;: Request labels be applied&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;create-issue&lt;/code&gt;: Request a new issue be created&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This safety layer is critical. The agent is sandboxed; it can’t silently modify your code. All actions go through controlled paths that leave an audit trail.&lt;/p&gt;

&lt;h3 id=&quot;a-concrete-example-contribution-guidelines-checker&quot;&gt;A Concrete Example: Contribution Guidelines Checker&lt;/h3&gt;

&lt;p&gt;Let’s walk through a real example from GitHub’s agentics repository. The Contribution Guidelines Checker workflow automatically reviews incoming pull requests and verifies they comply with your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CONTRIBUTING.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The YAML Front Matter:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;Reviews incoming pull requests to verify they comply with the repository&apos;s&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;contribution guidelines. Checks CONTRIBUTING.md and similar docs, then either&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;labels the PR as ready or provides constructive feedback.&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;pull_request&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;opened&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;synchronize&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;reaction&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;eyes&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read-all&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-labels&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;contribution-ready&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-comment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;github&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;toolsets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;lockdown&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;timeout-minutes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Natural Language Instructions:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gh&quot;&gt;# Contribution Guidelines Checker&lt;/span&gt;

You are a contribution guidelines reviewer. Your task is to analyse PR #$ 
and verify it meets the repository&apos;s contribution guidelines.

&lt;span class=&quot;gu&quot;&gt;## Step 1: Find Contribution Guidelines&lt;/span&gt;

Search for contribution guidelines in the repository. Check these locations:
&lt;span class=&quot;p&quot;&gt;1.&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`CONTRIBUTING.md`&lt;/span&gt; in root
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`.github/CONTRIBUTING.md`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`docs/CONTRIBUTING.md`&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Contribution sections in &lt;span class=&quot;sb&quot;&gt;`README.md`&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Step 2: Retrieve PR Details&lt;/span&gt;

Fetch the full PR details including title, description, changed files, and commit messages.

&lt;span class=&quot;gu&quot;&gt;## Step 3: Evaluate Compliance&lt;/span&gt;

Check the PR against the guidelines for:
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; PR Title format and clarity
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; PR Description completeness
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Commit message format
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Required sections (test plan, changelog)
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Documentation updates
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Other repo-specific requirements

&lt;span class=&quot;gu&quot;&gt;## Step 4: Take Action&lt;/span&gt;

&lt;span class=&quot;gs&quot;&gt;**If the PR meets all guidelines:**&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Add the &lt;span class=&quot;sb&quot;&gt;`contribution-ready`&lt;/span&gt; label

&lt;span class=&quot;gs&quot;&gt;**If the PR needs improvements:**&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Add a helpful comment that includes:
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; A friendly greeting
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; Specific guidelines not being met
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; Clear, actionable steps to bring it into compliance
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When a PR is opened:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The agent reads your contribution guidelines from the repository&lt;/li&gt;
  &lt;li&gt;It fetches the PR content&lt;/li&gt;
  &lt;li&gt;It evaluates the PR against those guidelines with nuanced judgement&lt;/li&gt;
  &lt;li&gt;If compliant, it adds a label and moves on&lt;/li&gt;
  &lt;li&gt;If not, it writes constructive feedback specific to what’s missing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is work that previously required either manual review or fragile regex-based heuristics. The agent brings genuine understanding to the task.&lt;/p&gt;

&lt;h2 id=&quot;why-agentic-workflows-exist-the-problem-they-solve&quot;&gt;Why Agentic Workflows Exist: The Problem They Solve&lt;/h2&gt;

&lt;h3 id=&quot;beyond-heuristics&quot;&gt;Beyond Heuristics&lt;/h3&gt;

&lt;p&gt;Traditional automation relies on heuristics and pattern matching. These break down when reality is more nuanced than your rules anticipated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Issue triage with traditional Actions requires defining rules for labeling:&lt;/p&gt;
&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;contains(github.event.issue.title, &apos;bug&apos;)&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;gh issue edit --add-label bug&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But what if someone writes: “Something isn’t working”? Your heuristic misses it. What about the tenth variation? You’re constantly patching rules.&lt;/p&gt;

&lt;p&gt;Agentic workflows understand intent. An agent reads “Something isn’t working as expected when I follow these steps in the docs” and can classify it appropriately, ask clarifying questions, and even suggest related issues.&lt;/p&gt;

&lt;h3 id=&quot;the-continuous-ai-vision&quot;&gt;The Continuous AI Vision&lt;/h3&gt;

&lt;p&gt;GitHub introduced the concept of “Continuous AI” - the systematic application of intelligence throughout development. It builds on years of Continuous Integration and Continuous Deployment.&lt;/p&gt;

&lt;p&gt;Where CI/CD automates mechanical tasks (“run tests, deploy if tests pass”), Continuous AI automates decision-making and adaptation (“analyse this issue, understand what’s happening, suggest improvements”).&lt;/p&gt;

&lt;p&gt;Agentic Workflows are GitHub’s primary vehicle for bringing Continuous AI to repositories today.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    A[&quot;Traditional CI/CD&quot;] --&amp;gt; B[&quot;Deterministic&amp;lt;br/&amp;gt;Automated Tasks&quot;]
    C[&quot;Agentic Workflows&quot;] --&amp;gt; D[&quot;Intelligent&amp;lt;br/&amp;gt;Automated Tasks&quot;]
    B --&amp;gt; E[&quot;Continuous AI&quot;]
    D --&amp;gt; E
    E --&amp;gt; F[&quot;Smarter Repository&amp;lt;br/&amp;gt;Ecosystem&quot;]

    style A fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style D fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style E fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style F fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;practical-use-cases&quot;&gt;Practical Use Cases&lt;/h2&gt;

&lt;p&gt;To understand the value of agentic workflows, consider real scenarios from GitHub’s &lt;a href=&quot;https://github.com/githubnext/agentics&quot;&gt;agentics repository&lt;/a&gt;:&lt;/p&gt;

&lt;h3 id=&quot;code-review-and-quality&quot;&gt;Code Review and Quality&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daily Test Improver&lt;/strong&gt;: Analyses coverage reports and creates PRs that add meaningful tests to under-tested areas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Simplifier&lt;/strong&gt;: Reviews recent code changes and creates PRs that simplify over-engineered or verbose implementations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate Code Detector&lt;/strong&gt;: Identifies repeated code patterns and suggests refactoring opportunities.&lt;/p&gt;

&lt;p&gt;These aren’t running static analysis tools. A coding agent is reading your actual code, understanding what it does, and proposing targeted improvements with reasoning.&lt;/p&gt;

&lt;h3 id=&quot;documentation-and-communication&quot;&gt;Documentation and Communication&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daily Documentation Updater&lt;/strong&gt;: Watches for code commits, identifies what changed, and updates relevant documentation sections. Creates PRs with coherent, well-written updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weekly Repository Map&lt;/strong&gt;: Generates visualisations of your repository structure and file sizes, creating compelling updates about your codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Daily Repository Chronicle&lt;/strong&gt;: Transforms raw GitHub activity into an engaging narrative summary of what happened this week.&lt;/p&gt;

&lt;h3 id=&quot;issue-management&quot;&gt;Issue Management&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Issue Triage&lt;/strong&gt;: When issues arrive, automatically add relevant labels, detect spam and duplicates, ask clarifying questions, and provide debugging suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue Arborist&lt;/strong&gt;: Organises issues hierarchically by linking related issues as parent-child relationships, building a more discoverable issue taxonomy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contribution Check&lt;/strong&gt;: Reviews open PRs in batches against contribution guidelines and creates summary reports with feedback grouped by readiness.&lt;/p&gt;

&lt;h3 id=&quot;continuous-improvement&quot;&gt;Continuous Improvement&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daily Accessibility Review&lt;/strong&gt;: Runs your application automatically, checks WCAG 2.2 compliance, and creates issues with specific accessibility violations and fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI Optimiser&lt;/strong&gt;: Analyses your GitHub Actions workflows for inefficiencies, identifies slow steps, and creates PRs with optimisations including time and cost reductions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Improver&lt;/strong&gt;: Runs benchmarks, identifies bottlenecks, and implements targeted performance improvements with measured impact.&lt;/p&gt;

&lt;p&gt;These workflows represent automation that genuinely understands your codebase and makes contextual decisions. A human would do many of these tasks manually today. Agentic workflows shift them to asynchronous, background execution.&lt;/p&gt;

&lt;h2 id=&quot;real-example-diving-into-contribution-guidelines-checker&quot;&gt;Real Example: Diving into Contribution Guidelines Checker&lt;/h2&gt;

&lt;p&gt;Let’s examine how the Contribution Guidelines Checker actually works to illustrate the nuance agentic workflows enable.&lt;/p&gt;

&lt;p&gt;The workflow accesses the agent instructions like this:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read-all&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This permits reading your entire repository. Then the agent:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Locates Your CONTRIBUTING.md&lt;/strong&gt;: Not all repos follow the same naming or directory structure. The agent searches multiple standard locations and adapts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Interprets Guidelines Intelligently&lt;/strong&gt;: It reads your guidelines and understands not just the literal rules, but the spirit of them. If your guidelines emphasise “respect for new contributors,” the agent considers whether feedback should be more encouraging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Evaluates with Context&lt;/strong&gt;: Rather than checking boxes against a fixed checklist, the agent understands the specific PR. A PR with 1,200 line changes might need different feedback than a 12-line typo fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Writes Helpful Feedback&lt;/strong&gt;: Instead of generic comments like “PR title must follow format,” it writes something like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Thanks for this contribution! I noticed the PR title could be more descriptive. Instead of “Update docs,” try “Add documentation for the new caching API.” This helps maintainers quickly understand what changed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is something a human PR reviewer would write. The agent learns to write similarly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Decides Actions Based on Context&lt;/strong&gt;: If contribution guidelines don’t exist, the agent assumes compliance rather than failing. It applies judgment about what matters.&lt;/p&gt;

&lt;p&gt;The safety boundary is critical here:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-labels&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;allowed&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;contribution-ready&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Only this label can be added&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# At most one label per run&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-comment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# At most one comment per run&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The agent cannot directly push code or silently modify PRs. It can propose adding a label or commenting. A human would review the workflow logs and approve. This maintains trust.&lt;/p&gt;

&lt;h2 id=&quot;security-and-safety-building-trust-in-ai-automation&quot;&gt;Security and Safety: Building Trust in AI Automation&lt;/h2&gt;

&lt;p&gt;With AI systems taking actions in your repository, security is paramount. GitHub Agentic Workflows incorporate multiple safety layers:&lt;/p&gt;

&lt;h3 id=&quot;1-principle-of-least-privilege&quot;&gt;1. Principle of Least Privilege&lt;/h3&gt;

&lt;p&gt;By default, workflows run with read-only permissions. Write operations must be explicitly enabled through &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;safe-outputs&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read-all&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Read everything&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;create-pull-request&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Only PRs can be created, nothing else&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;draft&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Draft PRs by default, require manual review&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The agent literally cannot push to main branch, delete branches, or modify secrets. It can only use allowed outputs.&lt;/p&gt;

&lt;h3 id=&quot;2-sandboxed-execution&quot;&gt;2. Sandboxed Execution&lt;/h3&gt;

&lt;p&gt;Agentic workflows run in GitHub-managed container environments with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Network isolation (blocked by default)&lt;/li&gt;
  &lt;li&gt;Tool allowlisting (agent can only use explicitly allowed tools)&lt;/li&gt;
  &lt;li&gt;Bash command restrictions (even &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bash&lt;/code&gt; access is sanitised)&lt;/li&gt;
  &lt;li&gt;File system isolation (can’t access GitHub secrets or other workflows)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-safe-output-validation&quot;&gt;3. Safe Output Validation&lt;/h3&gt;

&lt;p&gt;Every action the agent takes goes through sanitised handlers:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-comment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Limit to 5 comments per run&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;*&quot;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Can comment on issues/PRs&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;hide-older-comments&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Clean up previous agent comments&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These validate the action, check permissions, and log the operation. There’s a full audit trail.&lt;/p&gt;

&lt;h3 id=&quot;4-compilation-and-verification&quot;&gt;4. Compilation and Verification&lt;/h3&gt;

&lt;p&gt;Before an agentic workflow runs, it’s compiled from markdown to GitHub Actions YAML:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;gh aw compile
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This compilation process:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Validates YAML syntax and configuration&lt;/li&gt;
  &lt;li&gt;Applies security hardening (restricts context substitutions, validates tools)&lt;/li&gt;
  &lt;li&gt;Generates a lock file with all resolved references&lt;/li&gt;
  &lt;li&gt;Creates a reviewable YAML file you can inspect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You review the compiled YAML before committing. No hidden prompts or secret sauce.&lt;/p&gt;

&lt;h3 id=&quot;5-model-agnostic-safety&quot;&gt;5. Model-Agnostic Safety&lt;/h3&gt;

&lt;p&gt;Agentic Workflows support multiple AI coding agents (Copilot, Claude Code, OpenAI Codex). The safety boundaries apply regardless of which agent you’re using, ensuring consistent protection across different LLM providers.&lt;/p&gt;

&lt;h3 id=&quot;security-best-practices-for-your-workflows&quot;&gt;Security Best Practices for Your Workflows&lt;/h3&gt;

&lt;p&gt;When implementing agentic workflows, follow these practices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Start with Read-Only Operations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Begin with workflows that only comment on issues or create discussion posts. Gain confidence before enabling write operations.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read-all&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-comment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Safe to experiment with&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2. Use Draft PRs and Human Review Gates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your workflow creates pull requests, make them drafts by default:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;create-pull-request&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;draft&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Requires explicit approval to mark ready&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;3. Limit Operations with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;max&lt;/code&gt; Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Always set reasonable limits on operations:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;create-issue&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Only one issue per run&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;add-comment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Limited commenting&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;4. Enable Rate Limiting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Protect against runaway agents with rate limiting:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;rate-limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;60&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Max 5 operations per 60 seconds&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;5. Use Protected Files for Critical Edits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your workflow edits files, protect critical ones:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;create-pull-request&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;protected-files&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;fallback-to-issue&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# If can&apos;t safely edit, create issue instead&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This prevents accidental modifications to sensitive files like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; or deployment configurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Audit Regularly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Review workflow logs periodically:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;gh workflow view &amp;lt;workflow-name&amp;gt; &lt;span class=&quot;nt&quot;&gt;--log&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Check what tools the agent used, what decisions it made, and whether actions align with intent.&lt;/p&gt;

&lt;p&gt;This is radically different from handing off automation to a third-party service where you can’t see how decisions are made.&lt;/p&gt;

&lt;h2 id=&quot;getting-started-your-first-agentic-workflow&quot;&gt;Getting Started: Your First Agentic Workflow&lt;/h2&gt;

&lt;p&gt;Agentic Workflows require the GitHub Agentic Workflows CLI extension. Here’s how to get started:&lt;/p&gt;

&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;gh extension &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;github/gh-aw
gh aw upgrade  &lt;span class=&quot;c&quot;&gt;# Get latest version&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;quick-start-try-a-real-workflow&quot;&gt;Quick Start: Try a Real Workflow&lt;/h3&gt;

&lt;p&gt;The easiest way to learn is by adding an existing workflow from the agentics repository:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;your-repository
gh aw add-wizard githubnext/agentics/contribution-guidelines-checker
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This interactive wizard:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Guides you through setup&lt;/li&gt;
  &lt;li&gt;Creates the workflow in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/workflows/&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Compiles it to a runnable YAML file&lt;/li&gt;
  &lt;li&gt;Explains what the workflow does&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;creating-your-own-workflow&quot;&gt;Creating Your Own Workflow&lt;/h3&gt;

&lt;p&gt;Create a new file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/agentic-workflows/my-workflow.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Daily Quality Scan&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Scan for code quality issues&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;schedule&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;daily&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;permissions&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;issues&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;read&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;safe-outputs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;create-issue&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title-prefix&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;[quality]&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;labels&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;automation&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;quality&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;github&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;toolsets&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;bash&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;timeout-minutes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;15&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;gh&quot;&gt;# Daily Quality Scan&lt;/span&gt;

You are a code quality reviewer. Scan the recent code changes and:
&lt;span class=&quot;p&quot;&gt;
1.&lt;/span&gt; Identify code patterns that could be simplified
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Find potential performance issues
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; Check for missing error handling
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Suggest test coverage improvements

For each finding, create an issue with:
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Clear description of the issue
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Why it matters
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Suggested fix
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then compile and commit:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;gh aw compile
git add .github/workflows/my-workflow.md.lock.yml
git commit &lt;span class=&quot;nt&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Add daily quality scan workflow&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.lock.yml&lt;/code&gt; file is what GitHub Actions actually runs. It’s fully inspectable and version controlled.&lt;/p&gt;

&lt;h3 id=&quot;triggering-your-workflow&quot;&gt;Triggering Your Workflow&lt;/h3&gt;

&lt;p&gt;Once deployed:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Trigger manually&lt;/span&gt;
gh aw run my-workflow

&lt;span class=&quot;c&quot;&gt;# View logs&lt;/span&gt;
gh run list
gh run view &amp;lt;run-id&amp;gt; &lt;span class=&quot;nt&quot;&gt;--log&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;limitations-and-considerations&quot;&gt;Limitations and Considerations&lt;/h2&gt;

&lt;p&gt;Agentic Workflows are powerful, but they’re not a silver bullet:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Tool Reliability&lt;/strong&gt;: The agent can only use what’s available. If your workflow needs a specific analysis tool that doesn’t exist, you’ll need to build it or work around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Token and Cost Considerations&lt;/strong&gt;: Every workflow run consumes LLM tokens. Running agents multiple times daily across teams adds up. Monitor costs and use rate limiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Hallucinations&lt;/strong&gt;: AI models sometimes generate plausible-sounding but incorrect code or suggestions. This is why human review gates and draft PRs are important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Context Limitations&lt;/strong&gt;: Very large repositories might exceed context windows for some models. Agentic Workflows handle this, but it’s a practical constraint to be aware of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Non-Determinism&lt;/strong&gt;: Unlike traditional workflows that produce identical results on identical inputs, agentic workflows may vary slightly between runs because they involve LLM inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Learning Curve&lt;/strong&gt;: Writing good agentic workflow instructions requires a different mindset than writing traditional automation. You’re giving intuitive suggestions, not algorithmic steps.&lt;/p&gt;

&lt;h2 id=&quot;conclusion-the-future-is-conversational&quot;&gt;Conclusion: The Future is Conversational&lt;/h2&gt;

&lt;p&gt;Agentic Workflows represent a shift in how we think about repository automation. Instead of programming every detail, we describe intentions and let intelligent systems handle the complexity.&lt;/p&gt;

&lt;p&gt;The future of development tooling is increasingly conversational. You don’t write long configuration files; you describe what you want. The tools understand context, ask clarifying questions, and adapt to your needs.&lt;/p&gt;

&lt;p&gt;GitHub Agentic Workflows are how this future arrives in your repositories today. They’re safe, auditable, and in your control. They’re practical enough to use today, yet pioneering enough to shape how automation will work across the industry.&lt;/p&gt;

&lt;p&gt;If you’re managing repositories where documentation drifts, issue triage becomes overwhelming, or contributor experience could be better, agentic workflows offer a path forward. Start small, build confidence, and expand from there.&lt;/p&gt;

&lt;p&gt;The age of Continuous AI has arrived. What will you automate?&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Have you experimented with agentic workflows yet? What repository problems would you want an AI agent to help solve? Share your thoughts and applications in the comments below.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.github.com/gh-aw/&quot;&gt;GitHub Agentic Workflows Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubnext.com/projects/agentic-workflows/&quot;&gt;GitHub Next: Agentic Workflows Project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/githubnext/agentics&quot;&gt;Agentics Repository: Ready-to-Use Workflows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/automate-repository-tasks-with-github-agentic-workflows/&quot;&gt;GitHub Blog: Automate Repository Tasks with Agentic Workflows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://githubnext.com/projects/continuous-ai&quot;&gt;Continuous AI: The GitHub Vision&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 15 Mar 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/agentic-workflows-reimagining-automation/</link>
        <guid isPermaLink="true">https://azurewithaj.com/agentic-workflows-reimagining-automation/</guid>
        
        <category>github</category>
        
        <category>agentic</category>
        
        <category>workflows</category>
        
        <category>ai</category>
        
        <category>automation</category>
        
        <category>devops</category>
        
        <category>continuous-ai</category>
        
        <category>copilot</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>MCP Apps: Interactive Dashboards Inside Your AI Conversations</title>
        <description>&lt;p&gt;If you’ve been working with AI agents lately, you’ve probably hit a limitation: the agent can describe what it found, but it can’t show you anything interactive. Your agent finishes scanning a dataset and presents a table in text format. You need to explore further, so you ask it to reorganise the results. Another round trip. Another text response.&lt;/p&gt;

&lt;p&gt;MCP Apps change that equation entirely. They let your MCP servers return interactive HTML interfaces such as dashboards, forms, visualisations and configuration panels that render directly inside your AI conversation. No tab switching. No context loss. Just rich, interactive interfaces right where you’re having the conversation.&lt;/p&gt;

&lt;p&gt;In this post, I’ll explain what MCP Apps are, how they work, why they matter, and how you can leverage them in real scenarios like browsing Azure resources with an interactive dashboard.&lt;/p&gt;

&lt;h2 id=&quot;what-are-mcp-apps&quot;&gt;What Are MCP Apps?&lt;/h2&gt;

&lt;p&gt;MCP Apps are an extension to the Model Context Protocol that lets MCP tools declare and serve interactive user interfaces. Rather than returning only text, images, or structured data, a tool can now say “render this HTML interface alongside your response.”&lt;/p&gt;

&lt;p&gt;The key insight is simple: sometimes showing is better than telling. An agent can describe “your database has performance bottlenecks in query processing,” but an interactive graph lets you drill into the call stacks, hover for timing details, and validate the analysis yourself.&lt;/p&gt;

&lt;p&gt;MCP Apps bridge the gap between pure text-based AI interactions and rich desktop applications. They give agents a visual voice.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-mcp-apps-solve&quot;&gt;The Problem MCP Apps Solve&lt;/h2&gt;

&lt;p&gt;Traditional agent workflows suffer from a classic problem: agents work in text space, but developers think in visual and interactive space. When an agent presents findings, you often want to explore further, but the agent can only respond with more text.&lt;/p&gt;

&lt;p&gt;MCP Apps flip this around. Agents can now display:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Interactive dashboards&lt;/strong&gt;: Visualise metrics, logs, or resource states&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Forms with validation&lt;/strong&gt;: Configure systems with confidence&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Data tables with sorting and filtering&lt;/strong&gt;: Explore large datasets without truncation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Visualisations&lt;/strong&gt;: Flame graphs, heatmaps, network diagrams, 3D models&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Terminal-like interfaces&lt;/strong&gt;: Real-time monitoring and status updates&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;File pickers and selectors&lt;/strong&gt;: Choose resources from rich interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent doesn’t lose context, and it works alongside the interactive UI. When you interact with the app, it can call MCP tools to fetch fresh data, validate your choices, or execute actions.&lt;/p&gt;

&lt;h2 id=&quot;how-mcp-apps-work&quot;&gt;How MCP Apps Work&lt;/h2&gt;

&lt;p&gt;Understanding the architecture helps explain why MCP Apps are secure and efficient.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    A[&quot;MCP Server&amp;lt;br/&amp;gt;Registers Tool&quot;] --&amp;gt; B[&quot;Tool Description&amp;lt;br/&amp;gt;Includes UI Resource URI&quot;]
    B --&amp;gt; C[&quot;Host/Agent&amp;lt;br/&amp;gt;LLM Decides to Call Tool&quot;]
    C --&amp;gt; D[&quot;Host Fetches&amp;lt;br/&amp;gt;UI Resource&amp;lt;br/&amp;gt;from Server&quot;]
    D --&amp;gt; E[&quot;Sandboxed iframe&amp;lt;br/&amp;gt;Renders HTML/JS&quot;]
    E --&amp;gt; F[&quot;Bidirectional&amp;lt;br/&amp;gt;Communication&amp;lt;br/&amp;gt;via postMessage&quot;]
    F --&amp;gt; G[&quot;App Calls Tools&amp;lt;br/&amp;gt;Host Updates Display&quot;]
    
    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style F fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style G fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The flow works in four key steps:&lt;/p&gt;

&lt;h3 id=&quot;1-tool-registration-with-ui-metadata&quot;&gt;1. Tool Registration with UI Metadata&lt;/h3&gt;

&lt;p&gt;An MCP server registers a tool with a special &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_meta.ui.resourceUri&lt;/code&gt; field that points to an HTML interface:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nf&quot;&gt;registerAppTool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;list-azure-storage&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;List Azure Storage Accounts&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Browse storage accounts with filtering and drill-down&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;inputSchema&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{},&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;_meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
      &lt;span class=&quot;na&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;resourceUri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui://storage-dashboard/mcp-app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; 
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;async &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Fetch storage account data&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;listStorageAccounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;2-ui-preloading-and-resource-fetching&quot;&gt;2. UI Preloading and Resource Fetching&lt;/h3&gt;

&lt;p&gt;When an agent calls the tool, the host can preload the UI resource before the tool even executes. The host fetches the bundled HTML from the server, which is typically a single file containing HTML, CSS, and JavaScript bundled together.&lt;/p&gt;

&lt;h3 id=&quot;3-sandboxed-rendering&quot;&gt;3. Sandboxed Rendering&lt;/h3&gt;

&lt;p&gt;The host renders the HTML in a sandboxed iframe. This is crucial for security, as the app can’t access the parent window’s DOM, steal cookies, or execute scripts in the parent context. All communication happens through the postMessage API, which is controlled by the host.&lt;/p&gt;

&lt;h3 id=&quot;4-bidirectional-communication&quot;&gt;4. Bidirectional Communication&lt;/h3&gt;

&lt;p&gt;The app and host communicate via JSON-RPC over postMessage. The app can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Receive the initial tool result when rendered&lt;/li&gt;
  &lt;li&gt;Call tools on the server (e.g., “fetch more data with these filters”)&lt;/li&gt;
  &lt;li&gt;Send log messages back to the host&lt;/li&gt;
  &lt;li&gt;Update the model’s context with structured data&lt;/li&gt;
  &lt;li&gt;Request actions like opening URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This bidirectional flow means your UI stays dynamic without page reloads.&lt;/p&gt;

&lt;h2 id=&quot;practical-uses-building-an-azure-storage-dashboard&quot;&gt;Practical Uses: Building an Azure Storage Dashboard&lt;/h2&gt;

&lt;p&gt;Let me walk through a concrete example: building an interactive dashboard to browse Azure storage accounts.&lt;/p&gt;

&lt;p&gt;Instead of asking your agent “list all storage accounts and filter by location,” you could have an interactive dashboard where you:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;See all storage accounts in a table&lt;/li&gt;
  &lt;li&gt;Filter by resource group, region, or storage type&lt;/li&gt;
  &lt;li&gt;Click to view details (access keys, endpoints, configuration)&lt;/li&gt;
  &lt;li&gt;Perform actions (create a new account, update settings, delete a container)&lt;/li&gt;
  &lt;li&gt;Copy information without manual re-typing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s an example of how the server implements this:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;// Server side: register the tool with UI metadata&lt;/span&gt;
&lt;span class=&quot;nf&quot;&gt;registerAppTool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;storage-dashboard&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Azure Storage Dashboard&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Interactive dashboard for browsing and managing storage accounts&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;inputSchema&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;subscriptionId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;resourceGroup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;_meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
      &lt;span class=&quot;na&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;resourceUri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui://storage-dashboard/app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; 
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;async &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Fetch storage accounts from Azure&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getStorageAccounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscriptionId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resourceGroup&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;na&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Register the UI resource&lt;/span&gt;
&lt;span class=&quot;nf&quot;&gt;registerAppResource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui://storage-dashboard/app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;mimeType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;RESOURCE_MIME_TYPE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;async &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;readFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;dist/app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;utf-8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
          &lt;span class=&quot;na&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui://storage-dashboard/app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;mimeType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;RESOURCE_MIME_TYPE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;html&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On the UI side, the dashboard receives the storage account data and renders it interactively:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;// Client side: UI implementation&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@modelcontextprotocol/ext-apps&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;App&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt; 
  &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Storage Dashboard&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1.0.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Receive initial data from the tool&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ontoolresult&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)?.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nf&quot;&gt;renderStorageTable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// When user filters, call a tool to fetch filtered data&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;applyFilters&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;filters&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;callServerTool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;storage-dashboard&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;arguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
      &lt;span class=&quot;na&quot;&gt;subscriptionId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;filters&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscription&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;resourceGroup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;filters&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;group&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
  
  &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]?.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nf&quot;&gt;renderStorageTable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;renderStorageTable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Render interactive table with filtering, sorting, drill-down&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Users can see all accounts at once, explore details,&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// and perform actions without leaving the UI&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This approach gives you:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Instant visual feedback&lt;/strong&gt;: Tables, icons, colours communicate status at a glance&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Exploration without friction&lt;/strong&gt;: Filter, sort, drill down without conversation turns&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Context preservation&lt;/strong&gt;: Everything stays in one place—the agent’s workspace&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reduced latency&lt;/strong&gt;: UI interactions feel responsive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than asking your agent “show me storage accounts in the Australia regions” five times with slightly different filters, you see all options at once and click to explore.&lt;/p&gt;

&lt;h2 id=&quot;security-considerations-for-mcp-apps&quot;&gt;Security Considerations for MCP Apps&lt;/h2&gt;

&lt;p&gt;MCP Apps run in a sandboxed iframe, which provides strong security isolation, but “sandboxed” does not mean “bulletproof.” Here are security practices you should follow:&lt;/p&gt;

&lt;h3 id=&quot;sandboxing-fundamentals&quot;&gt;Sandboxing Fundamentals&lt;/h3&gt;

&lt;p&gt;MCP Apps run inside a sandboxed iframe with these restrictions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;No DOM access&lt;/strong&gt;: The app can’t access the parent window’s document or modify the main page&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No cookie theft&lt;/strong&gt;: localStorage and sessionStorage are isolated&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No page navigation&lt;/strong&gt;: The app can’t redirect the parent window&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Restricted script execution&lt;/strong&gt;: Scripts in the app run only within the sandbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All communication between the app and host happens through postMessage, which is an explicit, controlled channel.&lt;/p&gt;

&lt;h3 id=&quot;content-security-policy-csp&quot;&gt;Content Security Policy (CSP)&lt;/h3&gt;

&lt;p&gt;When serving your UI, specify which external origins can load resources. This prevents your app from accidentally (or maliciously) loading scripts from untrusted domains:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nf&quot;&gt;registerAppResource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ui://storage-dashboard/app.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
    &lt;span class=&quot;na&quot;&gt;mimeType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;RESOURCE_MIME_TYPE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;_meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;csp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;https://cdn.jsdelivr.net&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;https://cdn.example.com&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;async &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Serve HTML&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;permission-requests&quot;&gt;Permission Requests&lt;/h3&gt;

&lt;p&gt;Your app can request permissions (microphone, camera, geolocation), but these go through the host. The user is always in control of what the app can access. If your app doesn’t need a permission, don’t request it.&lt;/p&gt;

&lt;h3 id=&quot;input-validation-and-sanitisation&quot;&gt;Input Validation and Sanitisation&lt;/h3&gt;

&lt;p&gt;Since your app receives data from the server and may send data back to the server, validate everything:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;// On the client: validate server responses&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;ontoolresult&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]?.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Validate the data structure&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Expected array of accounts&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Sanitise rendered content if it comes from user input&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;account&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;account&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;sanitiseHTML&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;account&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    
    &lt;span class=&quot;nf&quot;&gt;renderStorageTable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Invalid tool result:&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;tool-call-authorisation&quot;&gt;Tool Call Authorisation&lt;/h3&gt;

&lt;p&gt;The host controls which tools your app can call. When you call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;app.callServerTool()&lt;/code&gt;, the host validates that:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The tool exists on the server&lt;/li&gt;
  &lt;li&gt;The host has access to that tool&lt;/li&gt;
  &lt;li&gt;The user has authorised the interaction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You don’t need to implement authorisation on the client, as the host enforces it.&lt;/p&gt;

&lt;h3 id=&quot;secure-default-data-handling&quot;&gt;Secure Default Data Handling&lt;/h3&gt;

&lt;p&gt;MCP Apps can request “rich context” updates to the model. Be careful what data you send:&lt;/p&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;// Good: send only necessary data&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;azure://storage/account/myaccount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;myaccount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;mimeType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;application/json&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Bad: don&apos;t send secrets or sensitive tokens&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;accessKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;very-secret-key&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// Never do this&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;server-side-security&quot;&gt;Server-Side Security&lt;/h3&gt;

&lt;p&gt;Your MCP server also has security responsibilities:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Validate inputs&lt;/strong&gt;: Check tool arguments before executing&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Authenticate requests&lt;/strong&gt;: Ensure the user has Azure/cloud access&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Limit data exposure&lt;/strong&gt;: Don’t return secrets, access keys, or connection strings to the UI&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Rate limiting&lt;/strong&gt;: Protect against abuse&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit logging&lt;/strong&gt;: Track who accessed what dashboards and resources&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-typescript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nf&quot;&gt;registerAppTool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;storage-dashboard&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* ... */&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;async &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Validate inputs&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscriptionId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/^&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;a-f0-9-&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]{36}&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;$/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Invalid subscription ID format&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Check authentication&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getCurrentUser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Authentication required&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Verify user has access to this subscription&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;hasAccess&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;verifySubscriptionAccess&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
      &lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscriptionId&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hasAccess&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Access denied&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Fetch data and return (without secrets)&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getStorageAccounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;subscriptionId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Remove sensitive data before returning&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;safeAccounts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;accounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;acc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;kind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// Never include:&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// primaryEndpoints, accessKey, connectionString, etc.&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;safeAccounts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}],&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;getting-started-with-mcp-apps&quot;&gt;Getting Started with MCP Apps&lt;/h2&gt;

&lt;p&gt;Building an MCP App is straightforward. The MCP team provides several ways to get started:&lt;/p&gt;

&lt;h3 id=&quot;using-an-ai-coding-agent-fastest&quot;&gt;Using an AI Coding Agent (Fastest)&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; At the time of writing, MCP Apps are only supported in VS Code Insiders, so you will need the Insiders build to render apps inside the editor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you have access to Claude Code, VS Code with GitHub Copilot, or another agent that supports skills, you can leverage the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;create-mcp-app&lt;/code&gt; skill:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Install the skill (Claude Code example)&lt;/span&gt;
/plugin marketplace add modelcontextprotocol/ext-apps
/plugin &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;mcp-apps@modelcontextprotocol-ext-apps
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then ask your agent: “Create an MCP App that displays a live Azure storage account dashboard.”&lt;/p&gt;

&lt;p&gt;The agent will scaffold a complete project with server, UI, and configuration files ready to run.&lt;/p&gt;

&lt;h3 id=&quot;manual-setup&quot;&gt;Manual Setup&lt;/h3&gt;

&lt;p&gt;If you prefer hands-on control, clone the examples repository and modify a starter template:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;git clone https://github.com/modelcontextprotocol/ext-apps.git
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;ext-apps/examples/basic-server-react
npm &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run serve
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/modelcontextprotocol/ext-apps&quot;&gt;ext-apps repository&lt;/a&gt; includes starter templates for React, Vue, Svelte, Preact, Solid, and vanilla JavaScript. Choose the framework that matches your preferences.&lt;/p&gt;

&lt;h3 id=&quot;testing-your-app&quot;&gt;Testing Your App&lt;/h3&gt;

&lt;p&gt;For development, use the basic-host test interface to debug your app locally:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;ext-apps/examples/basic-host
&lt;span class=&quot;nv&quot;&gt;SERVERS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;[&quot;http://localhost:3001/mcp&quot;]&apos;&lt;/span&gt; npm start
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Navigate to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://localhost:8080&lt;/code&gt; to see your app render in an MCP-compatible host.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;

&lt;p&gt;MCP Apps are still early, but adoption is growing rapidly. VS Code, Claude Desktop, Postman, and other AI environments already support them. As more tools and agents integrate MCP, you’ll see dashboards and interactive workflows become standard.&lt;/p&gt;

&lt;p&gt;The implications for DevOps and cloud engineering are particularly interesting. Instead of describing infrastructure or asking an agent to list resources in text, you could have interactive dashboards for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Resource discovery and filtering&lt;/strong&gt;: Browse Azure resources visually&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Configuration wizards&lt;/strong&gt;: Step through deployment decisions with validation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monitoring and alerting&lt;/strong&gt;: Real-time dashboards alongside AI analysis&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Approval workflows&lt;/strong&gt;: Review changes and approve with confidence&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cost analysis&lt;/strong&gt;: Interactive charts and drill-down into spending patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The combination of AI agents and interactive dashboards creates a powerful new class of tools.&lt;/p&gt;

&lt;h2 id=&quot;demo-mcp-storage-account-app&quot;&gt;Demo: MCP Storage Account App&lt;/h2&gt;

&lt;p&gt;I built a small demo MCP App that surfaces Azure storage accounts in a simple dashboard so you can explore the list, inspect details, and validate the flow end to end. If you want a practical reference implementation, you can find it here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/tw3lveparsecs/mcp-apps-demo&quot;&gt;https://github.com/tw3lveparsecs/mcp-apps-demo&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;key-takeaways&quot;&gt;Key Takeaways&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;MCP Apps solve a real problem&lt;/strong&gt;: Text-based agent responses don’t scale for exploration, configuration, or monitoring&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Security is built-in&lt;/strong&gt;: Sandboxed iframes isolate apps from the host, but you still need to validate inputs and protect secrets&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The architecture is elegant&lt;/strong&gt;: Simple tool registration with UI metadata, bidirectional postMessage communication, and no reinventing the wheel for authentication&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Azure integration is practical&lt;/strong&gt;: You can build dashboards that replace manual CLI queries and portal browsing&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The ecosystem is growing&lt;/strong&gt;: With VS Code support and multiple framework options, building MCP Apps is accessible to most developers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have you started building MCP Apps? What problems are you trying to solve with interactive dashboards? Share your experiences in the comments. I’d love to hear how the community is pushing this technology forward.&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://modelcontextprotocol.io/docs/extensions/apps&quot;&gt;Model Context Protocol: MCP Apps Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/blogs/2026/01/26/mcp-apps-support&quot;&gt;VS Code MCP Apps Support: Official Announcement&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/ext-apps&quot;&gt;MCP Apps SDK and Examples: GitHub&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://modelcontextprotocol.io/specification&quot;&gt;MCP Specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 14 Feb 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/mcp-apps/</link>
        <guid isPermaLink="true">https://azurewithaj.com/mcp-apps/</guid>
        
        <category>mcp</category>
        
        <category>ai</category>
        
        <category>agents</category>
        
        <category>vscode</category>
        
        <category>github</category>
        
        <category>copilot</category>
        
        
        <category>AI</category>
        
        <category>DevOps</category>
        
      </item>
    
      <item>
        <title>GitHub Copilot&apos;s Agentic Memory: Teaching AI to Remember and Learn Your Codebase</title>
        <description>&lt;p&gt;One of the biggest challenges with AI coding assistants has been their stateless nature with every interaction starting from scratch, requiring developers to repeatedly explain coding conventions, architectural patterns, and repository-specific knowledge. GitHub has just changed the game with the public preview of &lt;strong&gt;agentic memory&lt;/strong&gt; for GitHub Copilot, a revolutionary capability that allows AI agents to remember and learn from your codebase over time.&lt;/p&gt;

&lt;p&gt;This isn’t just another incremental improvement, it’s a fundamental shift toward truly intelligent AI assistants that grow smarter with every interaction. Let’s dive into how this groundbreaking feature works and why it’s set to transform how we collaborate with AI in our development workflows.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-context-lost-in-translation&quot;&gt;The Problem: Context Lost in Translation&lt;/h2&gt;

&lt;p&gt;Picture this scenario: You’re working on a complex enterprise application with specific coding conventions, database connection patterns, and synchronised configuration files. Every time you interact with GitHub Copilot, you find yourself explaining the same architectural decisions and coding standards. The AI produces decent code, but it lacks the deep understanding of your repository’s unique patterns and requirements.&lt;/p&gt;

&lt;p&gt;Traditional AI assistants suffer from “contextual amnesia” - they can’t retain knowledge between sessions. This means:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Repetitive explanations&lt;/strong&gt;: Constantly re-explaining coding conventions and patterns&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Inconsistent suggestions&lt;/strong&gt;: AI recommendations that don’t align with established codebase patterns&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Missed relationships&lt;/strong&gt;: Failing to understand dependencies between files that must stay synchronised&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Generic responses&lt;/strong&gt;: One-size-fits-all solutions that don’t respect repository-specific best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While we can leverage GitHub Copilot’s instructions to provide context, this approach is limited. Instructions can become lengthy, hard to maintain, and still don’t solve the problem of retaining knowledge across sessions.&lt;/p&gt;

&lt;h2 id=&quot;introducing-agentic-memory-ai-that-learns-and-remembers&quot;&gt;Introducing Agentic Memory: AI That Learns and Remembers&lt;/h2&gt;

&lt;p&gt;Agentic memory represents a paradigm shift in how AI assistants work with code. Instead of starting fresh with each interaction, Copilot now builds and maintains a persistent understanding of your repository through “memories”. Tightly scoped pieces of knowledge that it discovers and validates over time.&lt;/p&gt;

&lt;h3 id=&quot;how-memories-are-created&quot;&gt;How Memories Are Created&lt;/h3&gt;

&lt;p&gt;The memory system works through what GitHub calls “just-in-time verification”. Here’s the elegant process:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Copilot Agent Working] --&amp;gt; B{Discovers Actionable Pattern}
    B --&amp;gt;|Yes| C[Create Memory with Citations]
    B --&amp;gt;|No| D[Continue Work]
    C --&amp;gt; E[Store Memory in Repository]
    E --&amp;gt; F[Available for Future Sessions]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style C fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When Copilot discovers something worth remembering, it creates a structured memory entry:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;API version synchronisation&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;fact&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;API version must match between client SDK, server routes, and documentation.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;citations&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;src/client/sdk/constants.ts:12&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;server/routes/api.go:8&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;docs/api-reference.md:37&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;If the API version is not kept properly synchronised, the integration can fail or exhibit subtle bugs. Remembering these locations will help ensure they are kept synchronised in future updates.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;memory-validation-and-self-healing&quot;&gt;Memory Validation and Self-Healing&lt;/h3&gt;

&lt;p&gt;The brilliant aspect of this system is its self-healing nature. Before applying any stored memory, Copilot validates it against the current codebase:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Agent Starts New Session] --&amp;gt; B[Retrieve Repository Memories]
    B --&amp;gt; C[Check Citations Against Current Code]
    C --&amp;gt; D{Citations Valid?}
    D --&amp;gt;|Yes| E[Apply Memory Knowledge]
    D --&amp;gt;|No| F[Store Corrected Memory or Discard]
    E --&amp;gt; G[Continue with Enhanced Context]
    F --&amp;gt; G

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style C fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style E fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style G fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This real-time verification ensures that memories remain accurate even as code evolves, branches change, and files are refactored.&lt;/p&gt;

&lt;h2 id=&quot;privacy-and-security-is-it-safe-to-use&quot;&gt;Privacy and Security: Is it safe to use?&lt;/h2&gt;

&lt;p&gt;One of the first questions that comes to mind with any AI memory system is privacy and security. Is it safe to let an AI remember details about my codebase?&lt;/p&gt;

&lt;p&gt;What I had to understand is that Copilot Memory stores repository-scoped memories &lt;strong&gt;only&lt;/strong&gt;. This means memories are tied to a specific repository and can only be used by Copilot operations on that same repository.&lt;/p&gt;

&lt;p&gt;Key points:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Repository Isolation&lt;/strong&gt;: Memories are strictly scoped to individual repositories (not shared across repositories or orgs)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Permission-Based Creation&lt;/strong&gt;: Only contributors with write permissions can create memories&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Access Control&lt;/strong&gt;: Memories can be used by other users with appropriate repository access, but not outside that repository&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Management Tools&lt;/strong&gt;: Repository owners can view and delete stored memories via repository settings&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Automatic Expiry&lt;/strong&gt;: Memories automatically delete after 28 days unless refreshed through validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures that sensitive repository knowledge stays within the appropriate boundaries while enabling powerful AI assistance.&lt;/p&gt;

&lt;h2 id=&quot;current-availability-and-getting-started&quot;&gt;Current Availability and Getting Started&lt;/h2&gt;

&lt;p&gt;Agentic memory is currently available in public preview for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Copilot Coding Agent&lt;/strong&gt;: Enhanced task completion with repository-specific knowledge&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Copilot Code Review&lt;/strong&gt;: Smarter pull request reviews based on learned patterns&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Copilot CLI&lt;/strong&gt;: Context-aware command-line assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;enabling-memory-for-your-team&quot;&gt;Enabling Memory for Your Team&lt;/h3&gt;

&lt;p&gt;The feature is opt-in and available for all paid Copilot plans:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Individual Users (Copilot Pro/Pro+):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Navigate to &lt;a href=&quot;https://github.com/settings/copilot&quot;&gt;Personal Copilot Settings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Under “Features”, find “Copilot Memory”&lt;/li&gt;
  &lt;li&gt;Select “Enabled” from the dropdown&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;For Organisations and Enterprises:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Go to Organisation/Enterprise Settings&lt;/li&gt;
  &lt;li&gt;Navigate to Copilot policies&lt;/li&gt;
  &lt;li&gt;Enable Copilot Memory for your team&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Repository Management:&lt;/strong&gt;
Repository owners can review and manage stored memories via:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Repository Settings &amp;gt; Copilot &amp;gt; Memory&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;implementation-best-practices&quot;&gt;Implementation Best Practices&lt;/h2&gt;

&lt;p&gt;To maximise the value of agentic memory in your development workflows:&lt;/p&gt;

&lt;h3 id=&quot;1-start-with-high-impact-repositories&quot;&gt;1. Start with High-Impact Repositories&lt;/h3&gt;

&lt;p&gt;Enable memory on repositories with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Complex coding conventions&lt;/li&gt;
  &lt;li&gt;Synchronised configuration files&lt;/li&gt;
  &lt;li&gt;Specific architectural patterns&lt;/li&gt;
  &lt;li&gt;Multiple team contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-monitor-memory-quality&quot;&gt;2. Monitor Memory Quality&lt;/h3&gt;

&lt;p&gt;Regularly review stored memories to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Remove outdated or incorrect memories&lt;/li&gt;
  &lt;li&gt;Validate that learned patterns align with current practices&lt;/li&gt;
  &lt;li&gt;Ensure memories reflect your team’s coding standards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-leverage-cross-agent-benefits&quot;&gt;3. Leverage Cross-Agent Benefits&lt;/h3&gt;

&lt;p&gt;Use multiple Copilot features together:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Let Code Review agents learn from expert developer patterns&lt;/li&gt;
  &lt;li&gt;Allow Coding Agent to benefit from review insights&lt;/li&gt;
  &lt;li&gt;Use CLI with enhanced repository context&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;4-educate-your-team&quot;&gt;4. Educate Your Team&lt;/h3&gt;

&lt;p&gt;Ensure team members understand:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How memories are created and validated&lt;/li&gt;
  &lt;li&gt;The privacy and security model&lt;/li&gt;
  &lt;li&gt;How to review and manage repository memories&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion-a-new-era-of-intelligent-development&quot;&gt;Conclusion: A New Era of Intelligent Development&lt;/h2&gt;

&lt;p&gt;GitHub Copilot’s agentic memory represents a fundamental evolution in AI-assisted development. By solving the “contextual amnesia” problem, it enables AI agents to become true collaboration partners that grow more valuable over time.&lt;/p&gt;

&lt;p&gt;The beauty lies not just in the technical implementation, but in how it transforms the developer experience. No more explaining the same patterns repeatedly. No more generic suggestions that miss repository-specific context. Instead, you get AI assistance that truly understands your codebase and respects your team’s established practices.&lt;/p&gt;

&lt;p&gt;As we embrace this new era of agentic AI, the question isn’t whether to adopt these capabilities, but how quickly we can integrate them into our development workflows to unlock their full potential.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you enabled agentic memory in your repositories yet? What patterns do you hope Copilot will learn from your codebase? Share your experiences and thoughts in the comments below.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/github-copilot/building-an-agentic-memory-system-for-github-copilot/&quot;&gt;Building an Agentic Memory System for GitHub Copilot&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2026-01-15-agentic-memory-for-github-copilot-is-in-public-preview/&quot;&gt;Agentic Memory Public Preview Announcement&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/concepts/agents/copilot-memory&quot;&gt;About Agentic Memory for GitHub Copilot&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/use-copilot-agents/copilot-memory&quot;&gt;Enabling and Curating Copilot Memory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 21 Jan 2026 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/github-copilot-agentic-memory/</link>
        <guid isPermaLink="true">https://azurewithaj.com/github-copilot-agentic-memory/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>ai</category>
        
        <category>agentic</category>
        
        <category>memory</category>
        
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>Beyond Planning: How GitHub Spec Kit Transforms Ideas into Implementation</title>
        <description>&lt;p&gt;In my journey exploring agentic DevOps tools, I’ve previously written about &lt;a href=&quot;https://azurewithaj.com/posts/agentic-devops-delivered-major-enhancement/&quot;&gt;delivering major enhancements using Awesome Copilot&lt;/a&gt; and &lt;a href=&quot;https://azurewithaj.com/posts/github-plan-agent/&quot;&gt;GitHub’s built-in Plan Agent&lt;/a&gt;. Each tool has pushed the boundaries of what’s possible when AI assists with development workflows. Today, I’m diving into my experience with &lt;strong&gt;GitHub Spec Kit&lt;/strong&gt;, a developer-centric toolkit that takes planning and implementation to an entirely new level of detail and sophistication.&lt;/p&gt;

&lt;p&gt;This post explores how Spec Kit compares to the other tools I’ve evaluated, the unique advantages it brings to the developer experience, and why it might be the most comprehensive approach to AI-assisted development I’ve encountered yet.&lt;/p&gt;

&lt;h2 id=&quot;what-is-github-spec-kit&quot;&gt;What is GitHub Spec Kit?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/github/spec-kit&quot;&gt;GitHub Spec Kit&lt;/a&gt; is an open-source toolkit designed to help developers create detailed specifications and implementation plans directly within their development environment. Unlike the more accessible Plan Agent or the prompt-based Awesome Copilot approach, Spec Kit is purpose-built for developers who want to stay in their IDE while creating incredibly detailed project specifications.&lt;/p&gt;

&lt;p&gt;The toolkit provides structured templates, workflows, and methodologies for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Requirements gathering&lt;/strong&gt;: Systematic approach to capturing functional and non-functional requirements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Technical specification&lt;/strong&gt;: Detailed architecture and implementation planning&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Task breakdown&lt;/strong&gt;: Granular work item creation with dependencies and acceptance criteria&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Implementation tracking&lt;/strong&gt;: Progress monitoring and milestone management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;my-demo-project-visualising-spec-kit-in-action&quot;&gt;My Demo Project: Visualising Spec Kit in Action&lt;/h2&gt;

&lt;p&gt;To truly understand how Spec Kit works, I’ve been building a demo web application that demonstrates the toolkit’s capabilities and workflow using GitHub Spec Kit. The project showcases how Spec Kit transforms high-level ideas into detailed, implementable specifications.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/tw3lveparsecs/github-spec-kit-demo-app&quot;&gt;Demo repository available here&lt;/a&gt; &lt;em&gt;(Note: This project is still in active development as I continue exploring Spec Kit’s capabilities)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The demo includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Interactive visualisation of the Spec Kit workflow&lt;/li&gt;
  &lt;li&gt;Sample scenarios showcasing various inputs and their resulting outputs&lt;/li&gt;
  &lt;li&gt;Custom scenario builder using your own specifications&lt;/li&gt;
  &lt;li&gt;Exploration of tokens and constitution principles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;../assets/images/posts/2025-12-16-github-spec-kit/demo_app_overview.png&quot; alt=&quot;Spec Kit demo application overview&quot; /&gt;
&lt;em&gt;My demo application showcasing GitHub Spec Kit’s workflow and capabilities&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-evolution-from-simple-planning-to-comprehensive-specification&quot;&gt;The Evolution: From Simple Planning to Comprehensive Specification&lt;/h2&gt;

&lt;p&gt;Let me position Spec Kit within my broader experience with agentic development tools:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Awesome Copilot] --&amp;gt; B[Proven Prompts&amp;lt;br/&amp;gt;&amp;amp; Agents]
    B --&amp;gt; C[Manual Integration&amp;lt;br/&amp;gt;Required]

    D[Plan Agent] --&amp;gt; E[Built-in VS Code&amp;lt;br/&amp;gt;Integration]
    E --&amp;gt; F[Zero Configuration&amp;lt;br/&amp;gt;Planning]

    G[GitHub Spec Kit] --&amp;gt; H[Developer-Centric&amp;lt;br/&amp;gt;Toolkit]
    H --&amp;gt; I[Comprehensive&amp;lt;br/&amp;gt;Specification Framework]

    C --&amp;gt; J[Good for: Accessing&amp;lt;br/&amp;gt;Library of Customisations]
    F --&amp;gt; K[Good for: Natural&amp;lt;br/&amp;gt;Language Planning]
    I --&amp;gt; L[Good for: Staying&amp;lt;br/&amp;gt;in the IDE]

    style A fill:#6366f1,stroke:#4f46e5,stroke-width:2px,color:#fff
    style B fill:#818cf8,stroke:#6366f1,stroke-width:2px,color:#fff
    style C fill:#a5b4fc,stroke:#818cf8,stroke-width:2px,color:#1e1b4b
    style D fill:#f97316,stroke:#ea580c,stroke-width:2px,color:#fff
    style E fill:#fb923c,stroke:#f97316,stroke-width:2px,color:#fff
    style F fill:#fdba74,stroke:#fb923c,stroke-width:2px,color:#431407
    style G fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff
    style H fill:#34d399,stroke:#10b981,stroke-width:2px,color:#fff
    style I fill:#6ee7b7,stroke:#34d399,stroke-width:2px,color:#022c22
    style J fill:#a5b4fc,stroke:#818cf8,stroke-width:2px,color:#1e1b4b
    style K fill:#fdba74,stroke:#fb923c,stroke-width:2px,color:#431407
    style L fill:#6ee7b7,stroke:#34d399,stroke-width:2px,color:#022c22
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each tool serves different needs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Awesome Copilot&lt;/strong&gt;: Flexible, customisable, requires configuration knowledge&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Plan Agent&lt;/strong&gt;: Accessible, integrated, easy to get started&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spec Kit&lt;/strong&gt;: Requires setup knowledge, developer-focused, keeps you in the IDE&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;my-experience-four-key-observations&quot;&gt;My Experience: Four Key Observations&lt;/h2&gt;

&lt;h3 id=&quot;1-developer-centric-and-ide-native&quot;&gt;1. Developer-Centric and IDE-Native&lt;/h3&gt;

&lt;p&gt;One of Spec Kit’s greatest strengths is how it keeps you firmly planted in your development environment. Unlike web-based planning tools or even the Chat view in VS Code, Spec Kit integrates directly into your project structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I observed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Specifications become part of your repository, versioned alongside your code&lt;/li&gt;
  &lt;li&gt;Templates and workflows integrate with your existing development tools&lt;/li&gt;
  &lt;li&gt;No context switching between planning and implementation environments&lt;/li&gt;
  &lt;li&gt;Natural integration with Git workflows for specification evolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach feels natural for developers who prefer staying in their IDE rather than switching to separate planning tools.&lt;/p&gt;

&lt;h3 id=&quot;2-barrier-to-entry-vs-accessibility&quot;&gt;2. Barrier to Entry vs Accessibility&lt;/h3&gt;

&lt;p&gt;While Spec Kit’s developer-centric approach is a strength, it also creates a higher barrier to entry compared to something like Plan Agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan Agent advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Works immediately in VS Code with zero setup&lt;/li&gt;
  &lt;li&gt;Natural language interface - just describe what you want&lt;/li&gt;
  &lt;li&gt;No need to understand templates or workflow structures&lt;/li&gt;
  &lt;li&gt;Easy to get started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Spec Kit considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Requires understanding of the toolkit’s structure and methodology&lt;/li&gt;
  &lt;li&gt;Initial setup and configuration needed&lt;/li&gt;
  &lt;li&gt;Need familiarity with templates and specification formats&lt;/li&gt;
  &lt;li&gt;Best suited for developers comfortable with structured approaches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For teams new to AI-assisted development, Plan Agent provides a gentler introduction. Spec Kit is better suited for teams ready to invest in a more comprehensive planning methodology.&lt;/p&gt;

&lt;h3 id=&quot;3-incredibly-detailed-planning-and-implementation&quot;&gt;3. Incredibly Detailed Planning and Implementation&lt;/h3&gt;

&lt;p&gt;Where Spec Kit truly shines is in the depth and detail of the plans it helps you create.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level of detail I experienced:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: Not just functional requirements, but detailed acceptance criteria, edge cases, and non-functional requirements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Implementation phases&lt;/strong&gt;: Granular task breakdown with dependencies, and success criteria&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Test plans&lt;/strong&gt;: Detailed test plans specific to each user story&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Built-in templates for technical documentation, API specs, and user guides&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;4-understanding-each-phase-and-input-requirements&quot;&gt;4. Understanding Each Phase and Input Requirements&lt;/h3&gt;

&lt;p&gt;To get the most out of Spec Kit, I found you need to understand its methodology and provide specific inputs at each phase. This isn’t necessarily a limitation, but it does require investment in learning the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key phases I learned:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Discovery Phase&lt;/strong&gt;: Gathering requirements, stakeholder input, and constraints&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Specification Phase&lt;/strong&gt;: Creating detailed technical and functional specifications&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Planning Phase&lt;/strong&gt;: Breaking down work into implementable tasks&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Implementation Phase&lt;/strong&gt;: Executing against the detailed specifications&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Validation Phase&lt;/strong&gt;: Testing and verification against original requirements&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Critical inputs for success:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Context&lt;/strong&gt;: Detailed background about the system, users, and constraints&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: Clear functional and non-functional requirements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Constraints&lt;/strong&gt;: Technical, business, and resource limitations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;: External systems, APIs, and integration requirements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Success criteria&lt;/strong&gt;: Measurable outcomes and acceptance criteria&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;when-to-use-each-tool-my-current-thinking&quot;&gt;When to Use Each Tool: My Current Thinking&lt;/h2&gt;

&lt;p&gt;Based on my experience across all three tools, here’s my current framework for tool selection:&lt;/p&gt;

&lt;h3 id=&quot;use-plan-agent-when&quot;&gt;Use Plan Agent When:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Natural language&lt;/strong&gt;: Prefer a natural language centric approach&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Proof of concepts&lt;/strong&gt;: Exploring feasibility of ideas&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Team onboarding&lt;/strong&gt;: Introducing AI-assisted planning&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Accessibility priority&lt;/strong&gt;: Need zero-configuration solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;use-awesome-copilot-when&quot;&gt;Use Awesome Copilot When:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Custom workflows&lt;/strong&gt;: Need specific prompt structures or agents&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Team standards&lt;/strong&gt;: Require consistent planning templates&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Iterative refinement&lt;/strong&gt;: Building on proven prompt libraries&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Flexibility priority&lt;/strong&gt;: Need to customise approaches&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;use-spec-kit-when&quot;&gt;Use Spec Kit When:&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Developer centric&lt;/strong&gt; Prefer a developer centric approach&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Developer teams&lt;/strong&gt;: Working with teams comfortable with structured approaches&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Investment in planning&lt;/strong&gt;: Invested in gathering and providing inputs for each phase of the workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-future-of-specification-driven-development&quot;&gt;The Future of Specification-Driven Development&lt;/h2&gt;

&lt;p&gt;Spec Kit represents a fascinating evolution in how we think about AI-assisted development. Rather than replacing human planning, it provides structure and methodology to make our planning more comprehensive and actionable.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The investment in learning Spec Kit’s methodology pays dividends in the quality and detail of the resulting specifications. For development teams ready to embrace structured, specification-driven development, Spec Kit provides a powerful framework for transforming ideas into thoroughly planned implementations.&lt;/p&gt;

&lt;p&gt;The key insight from my experience across all three tools is that different projects require different levels of planning sophistication. Having access to this spectrum of tools, from the quick accessibility of Plan Agent to the developer centric approach of Spec Kit. It enables us to match our planning approach to our project needs.&lt;/p&gt;

&lt;p&gt;Have you experimented with GitHub Spec Kit or similar specification frameworks? I’d love to hear about your experiences and how you’re integrating structured planning into your development workflows.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/github/spec-kit&quot;&gt;GitHub Spec Kit Repository&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tw3lveparsecs/github-spec-kit-demo-app&quot;&gt;My Demo Application&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://azurewithaj.com/posts/github-plan-agent/&quot;&gt;My Previous Post: From Awesome Copilot to Plan Agent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://azurewithaj.com/posts/agentic-devops-delivered-major-enhancement/&quot;&gt;My Previous Post: Delivering Major Enhancements Without Writing Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 15 Dec 2025 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/github-spec-kit/</link>
        <guid isPermaLink="true">https://azurewithaj.com/github-spec-kit/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>devops</category>
        
        <category>agentic</category>
        
        <category>ai</category>
        
        <category>spec-kit</category>
        
        <category>planning</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>From Awesome Copilot to Plan Agent: GitHub&apos;s Built-in Planning Revolution</title>
        <description>&lt;p&gt;In my &lt;a href=&quot;https://azurewithaj.com/posts/agentic-devops-delivered-major-enhancement&quot;&gt;previous post about delivering major enhancements using agentic DevOps&lt;/a&gt;, I shared how I leveraged &lt;a href=&quot;https://github.com/github/awesome-copilot&quot;&gt;GitHub’s Awesome Copilot repository&lt;/a&gt; to access proven prompts and agents for creating implementation plans. That approach served me well, but GitHub has now introduced something that changes the game entirely: the built-in &lt;strong&gt;Plan agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post explores how the new Plan agent compares to my previous Awesome Copilot workflow, what’s changed in my approach, and whether this native integration delivers on its promise of streamlining complex coding tasks.&lt;/p&gt;

&lt;h2 id=&quot;the-evolution-from-external-resources-to-native-integration&quot;&gt;The Evolution: From External Resources to Native Integration&lt;/h2&gt;

&lt;h3 id=&quot;my-previous-approach-with-awesome-copilot&quot;&gt;My Previous Approach with Awesome Copilot&lt;/h3&gt;

&lt;p&gt;When I wrote about my agentic DevOps journey, my planning workflow relied on external resources:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Accessing the Awesome Copilot repository&lt;/strong&gt; for proven prompts and methodologies&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Using the Create Implementation Plan prompt&lt;/strong&gt; to generate comprehensive technical plans&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Applying the Implementation Plan agent (formerly chat mode)&lt;/strong&gt; to iteratively refine and expand the plan&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Optionally using the MCP server&lt;/strong&gt; to integrate these resources into my workflow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach worked exceptionally well, but it required:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Knowledge of where to find these resources&lt;/li&gt;
  &lt;li&gt;Manual integration of prompts and agents&lt;/li&gt;
  &lt;li&gt;Context switching between resources and VS Code&lt;/li&gt;
  &lt;li&gt;Configuration of MCP servers for seamless integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;the-new-built-in-plan-agent&quot;&gt;The New Built-in Plan Agent&lt;/h3&gt;

&lt;p&gt;With VS Code 1.105, GitHub introduced the Plan agent as a native feature. Instead of hunting for external prompts or configuring MCP servers, you can now access planning capabilities directly from the Chat view.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    subgraph Previous[&quot;Previous Approach&quot;]
        A[Awesome Copilot Repo] --&amp;gt; B[Find Prompts]
        B --&amp;gt; C[Configure Agents]
        C --&amp;gt; D[Create Plan]
    end

    subgraph Current[&quot;Current Approach&quot;]
        E[Open Chat View] --&amp;gt; F[Select Plan Agent]
        F --&amp;gt; G[Describe Task]
        G --&amp;gt; H[Receive Plan]
    end

    style A fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style F fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style G fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style H fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;how-the-plan-agent-works&quot;&gt;How the Plan Agent Works&lt;/h2&gt;

&lt;p&gt;The Plan agent is designed to help you analyse tasks, break them down into steps, and generate implementation plans before you start development. This approach helps avoid missing important requirements, something I emphasised heavily in my previous workflow.&lt;/p&gt;

&lt;h3 id=&quot;getting-started-with-plan-agent&quot;&gt;Getting Started with Plan Agent&lt;/h3&gt;

&lt;p&gt;To use the Plan agent:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open the Chat view (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+Alt+I&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Select &lt;strong&gt;Plan&lt;/strong&gt; from the agents dropdown&lt;/li&gt;
  &lt;li&gt;Describe your task in detail&lt;/li&gt;
  &lt;li&gt;Review and refine the generated plan&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;the-handoff-feature&quot;&gt;The Handoff Feature&lt;/h3&gt;

&lt;p&gt;One of the most powerful features of the Plan agent is the &lt;strong&gt;handoff&lt;/strong&gt; capability. After finalising your plan, you can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Start implementation immediately&lt;/strong&gt;: Transition directly to coding with context preserved&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Save the plan for later&lt;/strong&gt;: Store the plan for future reference or team collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This handoff feature uses VS Code’s new custom chat modes system, creating guided workflows that transition between planning and implementation phases with suggested next steps.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/images/posts/2025-12-10-github-plan-agent/plan_agent_handoff.png&quot; alt=&quot;Plan agent handoff options&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;comparing-the-two-approaches&quot;&gt;Comparing the Two Approaches&lt;/h2&gt;

&lt;h3 id=&quot;what-awesome-copilot-offered&quot;&gt;What Awesome Copilot Offered&lt;/h3&gt;

&lt;p&gt;The Awesome Copilot resources provided:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Curated prompts&lt;/strong&gt;: Community-tested and refined over time&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Structured templates&lt;/strong&gt;: Consistent format for implementation plans&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt;: Persona-driven interactions for specific tasks&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Ability to customise and extend prompts&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MCP integration&lt;/strong&gt;: Programmatic access to resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;what-plan-agent-brings&quot;&gt;What Plan Agent Brings&lt;/h3&gt;

&lt;p&gt;The built-in Plan agent offers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Zero configuration&lt;/strong&gt;: Works out of the box in VS Code&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Native integration&lt;/strong&gt;: Seamless experience within the editor&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Handoff workflow&lt;/strong&gt;: Direct transition from planning to implementation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Context preservation&lt;/strong&gt;: Plan context carries through to development&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Subagent support&lt;/strong&gt;: Works alongside VS Code’s new isolated subagents feature&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;my-experience-plan-agent-vs-awesome-copilot&quot;&gt;My Experience: Plan Agent vs Awesome Copilot&lt;/h2&gt;

&lt;h3 id=&quot;the-good-accessibility-and-workflow&quot;&gt;The Good: Accessibility and Workflow&lt;/h3&gt;

&lt;p&gt;The Plan agent’s greatest strength is its &lt;strong&gt;accessibility&lt;/strong&gt;. It’s incredibly intuitive and requires virtually no learning curve. Within minutes of opening the Chat view, I was generating comprehensive plans without needing to reference external documentation or configure anything.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;iterative refinement process&lt;/strong&gt; feels natural. Unlike my previous workflow where I’d copy prompts from Awesome Copilot and paste them into chat, the Plan agent maintains conversation context seamlessly. I can ask for more detail on specific steps, request alternative approaches, or drill down into technical considerations without losing the thread of the discussion.&lt;/p&gt;

&lt;p&gt;Perhaps most impressive is the &lt;strong&gt;handoff mechanism&lt;/strong&gt;. The ability to transition directly from planning to implementation or save the plan to a file while preserving all context eliminates friction.&lt;/p&gt;

&lt;h3 id=&quot;the-trade-offs-structure-and-depth&quot;&gt;The Trade-offs: Structure and Depth&lt;/h3&gt;

&lt;p&gt;The Plan agent’s output differs from what I was accustomed to with Awesome Copilot’s structured templates:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan Structure&lt;/strong&gt;: The Awesome Copilot “Create Implementation Plan” prompt produced well-structured output with clearly articulated goals and tasks broken down hierarchically, making it suitable for backlog items, stakeholder communication, or sprint ceremonies. In contrast, the Plan agent breaks plans down into detailed bulleted steps focused on technical implementation. While this works well for development, it’s less structured for project management purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk and Dependency Analysis&lt;/strong&gt;: I’ve noticed that &lt;strong&gt;dependencies and risks aren’t explicitly called out&lt;/strong&gt; in the plans. The Awesome Copilot templates had dedicated sections for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Technical dependencies and integration points&lt;/li&gt;
  &lt;li&gt;Potential risks and mitigation strategies&lt;/li&gt;
  &lt;li&gt;Security and compliance considerations&lt;/li&gt;
  &lt;li&gt;Performance implications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;integration-with-the-broader-agentic-workflow&quot;&gt;Integration with the Broader Agentic Workflow&lt;/h2&gt;

&lt;p&gt;The Plan agent doesn’t exist in isolation. It’s part of a broader ecosystem that GitHub introduced at Universe 2025:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Plan Agent] --&amp;gt; B[Create Implementation Plan]
    B --&amp;gt; C{Handoff Decision}
    C --&amp;gt;|Immediate| D[Start Implementation]
    C --&amp;gt;|Delegate| E[Coding Agent]
    C --&amp;gt;|Save| F[Plan for Later]

    D --&amp;gt; G[Local Development]
    E --&amp;gt; H[Autonomous Development]
    F --&amp;gt; I[Team Collaboration]

    G --&amp;gt; J[Pull Request]
    H --&amp;gt; J
    I --&amp;gt; K[Future Session]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style C fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style G fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style H fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style I fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style J fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style K fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;subagents-for-research&quot;&gt;Subagents for Research&lt;/h3&gt;

&lt;p&gt;The new isolated subagents feature complements the Plan agent perfectly. You can use subagents for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Context gathering&lt;/strong&gt;: Research authentication mechanisms, API patterns, or existing implementations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Analysis&lt;/strong&gt;: Investigate codebase structure or dependency relationships&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Parallel research&lt;/strong&gt;: Delegate research tasks while you focus on planning&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;delegation-to-coding-agent&quot;&gt;Delegation to Coding Agent&lt;/h3&gt;

&lt;p&gt;If your repository has the &lt;a href=&quot;https://aka.ms/coding-agent-docs&quot;&gt;Copilot coding agent enabled&lt;/a&gt;, you can delegate directly from your planning session. This mirrors my previous workflow but with better context preservation:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Plan with the Plan agent&lt;/li&gt;
  &lt;li&gt;Refine and finalise the plan&lt;/li&gt;
  &lt;li&gt;Delegate to the coding agent&lt;/li&gt;
  &lt;li&gt;Review and merge the PR&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The introduction of the Plan agent signals GitHub’s commitment to making agentic workflows more accessible. Rather than requiring developers to discover and configure external resources, core capabilities are being baked into the tools we use daily. The journey from Awesome Copilot prompts to the built-in Plan agent represents a significant step forward in making agentic DevOps accessible to all developers. While Awesome Copilot remains a valuable resource for customised workflows and team-specific templates, the Plan agent provides an excellent starting point that requires zero configuration.&lt;/p&gt;

&lt;p&gt;For my workflow, the Plan agent has become my default starting point for new features and enhancements. The seamless integration, handoff capabilities, and context preservation make it a natural fit for the agentic DevOps approach I outlined in my previous post.&lt;/p&gt;

&lt;p&gt;Have you tried the Plan agent in VS Code? I’d love to hear how it compares to your existing planning workflows. Share your experiences in the comments below.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/updates/v1_105#_plan-agent&quot;&gt;VS Code 1.105 Release Notes - Plan Agent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/copilot/chat/chat-planning&quot;&gt;Using the Built-in Plan Agent in VS Code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/github/awesome-copilot&quot;&gt;GitHub’s Awesome Copilot Repository&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/copilot/customization/custom-chat-modes#_handoffs&quot;&gt;Custom Chat Modes and Handoffs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://azurewithaj.com/posts/agentic-devops-delivered-major-enhancement/&quot;&gt;My Previous Post: Delivering Major Enhancements Without Writing Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 09 Dec 2025 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/github-plan-agent/</link>
        <guid isPermaLink="true">https://azurewithaj.com/github-plan-agent/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>devops</category>
        
        <category>agentic</category>
        
        <category>ai</category>
        
        <category>plan</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>Azure Copilot Agents: Transforming Cloud Operations</title>
        <description>&lt;p&gt;Microsoft Ignite 2025 has delivered what might be the most transformative announcement for cloud operations teams: &lt;strong&gt;Azure Copilot Agents&lt;/strong&gt;. This isn’t just another AI assistant, it’s a fundamental reimagining of how we deploy, monitor, optimise, and troubleshoot cloud infrastructure.&lt;/p&gt;

&lt;p&gt;The announcement centres around five specialised agents that work together as an orchestrated team, each bringing deep expertise in their domain while maintaining the context and governance that enterprise cloud operations demand. This is the natural evolution of what we’ve been building toward in the DevOps space: AI that doesn’t just complete our commands, but actively participates in the operational lifecycle.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-cloud-operations-complexity-at-scale&quot;&gt;The Problem: Cloud Operations Complexity at Scale&lt;/h2&gt;

&lt;p&gt;Before we dive into the solution, let’s acknowledge the reality of modern cloud operations. Today’s cloud teams are drowning in complexity:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Deployment sprawl&lt;/strong&gt;: Managing infrastructure across multiple regions, subscriptions, and resource types&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reactive troubleshooting&lt;/strong&gt;: Constant fire-fighting instead of proactive optimisation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Knowledge silos&lt;/strong&gt;: Deep expertise trapped in individual team members&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Context switching&lt;/strong&gt;: Bouncing between Azure Portal, CLI tools, monitoring dashboards, and documentation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Compliance burden&lt;/strong&gt;: Ensuring security and governance across growing environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The traditional approach requires teams to master dozens of services, maintain mental models of complex interdependencies, and execute repetitive operational tasks that could be automated if only we had the orchestration capabilities to make it happen safely and reliably.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Cloud Operations Team] --&amp;gt; B[Azure Portal]
    A --&amp;gt; C[Azure CLI]
    A --&amp;gt; D[PowerShell Scripts]
    A --&amp;gt; E[Monitoring Dashboards]
    A --&amp;gt; F[Documentation Sites]

    B -.-&amp;gt;|No shared context| C
    C -.-&amp;gt;|Manual coordination| D
    D -.-&amp;gt;|Reactive responses| E
    E -.-&amp;gt;|Knowledge gaps| F
    F -.-&amp;gt;|Context switching| B

    G[Complex Cloud Environment] --&amp;gt; H[Deployment Issues]
    G --&amp;gt; I[Performance Problems]
    G --&amp;gt; J[Security Concerns]
    G --&amp;gt; K[Cost Overruns]

    style A fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style B fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style C fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style D fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style E fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style F fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style G fill:#dc2626,stroke:#991b1b,stroke-width:3px,color:#fff
    style H fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff
    style I fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff
    style J fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff
    style K fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;the-transformation-azure-copilot-as-your-cloud-operations-command-centre&quot;&gt;The Transformation: Azure Copilot as Your Cloud Operations Command Centre&lt;/h2&gt;

&lt;p&gt;Azure Copilot Agents transforms this fragmented experience into a unified, intelligent operations platform. Instead of managing tools, you’re orchestrating specialised agents that bring deep expertise to every aspect of cloud operations.&lt;/p&gt;

&lt;p&gt;The core insight is elegant: &lt;strong&gt;Azure Copilot becomes your cloud operations command centre&lt;/strong&gt;, intelligently surfacing the right agent at the right time based on your needs. Whether you’re deploying new infrastructure, investigating performance issues, or optimising costs, the appropriate specialist agent appears with full context and actionable recommendations.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Azure Copilot Command Centre] --&amp;gt; B[Deployment Agent]
    A --&amp;gt; C[Observability Agent]
    A --&amp;gt; D[Optimisation Agent]
    A --&amp;gt; E[Resiliency Agent]
    A --&amp;gt; F[Troubleshooting Agent]

    B &amp;lt;--&amp;gt; C
    C &amp;lt;--&amp;gt; D
    D &amp;lt;--&amp;gt; E
    E &amp;lt;--&amp;gt; F
    F &amp;lt;--&amp;gt; B

    G[Cloud Operations Team] --&amp;gt; A

    H[Unified Context &amp;amp; Governance] --&amp;gt; A
    I[Azure Well-Architected Framework] --&amp;gt; A
    J[Enterprise Controls] --&amp;gt; A

    style A fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style B fill:#3b82f6,stroke:#2563eb,stroke-width:2px,color:#fff
    style C fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#fff
    style D fill:#f59e0b,stroke:#d97706,stroke-width:2px,color:#fff
    style E fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff
    style F fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#fff
    style G fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style H fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style I fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style J fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;the-five-specialised-agents-your-cloud-operations-dream-team&quot;&gt;The Five Specialised Agents: Your Cloud Operations Dream Team&lt;/h2&gt;

&lt;p&gt;Let’s explore each agent and understand how they transform specific operational workflows.&lt;/p&gt;

&lt;h3 id=&quot;1-deployment-agent-your-virtual-cloud-architect&quot;&gt;1. Deployment Agent: Your Virtual Cloud Architect&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Deployment Agent&lt;/strong&gt; serves as a virtual cloud solution architect, guiding you through infrastructure planning and deployment with precision and best practices built-in.&lt;/p&gt;

&lt;h4 id=&quot;what-makes-it-game-changing&quot;&gt;What Makes It Game-Changing&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Intelligent planning&lt;/strong&gt;: Translates high-level goals into detailed infrastructure blueprints&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Azure Well-Architected compliance&lt;/strong&gt;: All recommendations follow Microsoft’s framework&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multi-turn conversations&lt;/strong&gt;: Clarifies requirements through iterative discussion&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Complete automation&lt;/strong&gt;: Generates ready-to-deploy code configurations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Integrated workflows&lt;/strong&gt;: Direct integration with GitHub and VS Code for the Web&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;example-workflow&quot;&gt;Example Workflow&lt;/h4&gt;

&lt;p&gt;Here’s how the Deployment Agent transforms a typical infrastructure request:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;sequenceDiagram
    participant O as Operations Team
    participant AC as Azure Copilot
    participant DA as Deployment Agent
    participant GH as GitHub
    participant VS as VS Code Web

    O-&amp;gt;&amp;gt;AC: &quot;I need a scalable web app with SQL database&quot;
    AC-&amp;gt;&amp;gt;DA: Routes to Deployment Agent
    DA-&amp;gt;&amp;gt;DA: Analyzes requirements
    DA-&amp;gt;&amp;gt;AC: Asks clarifying questions about scale, regions, security
    O-&amp;gt;&amp;gt;AC: Provides additional context
    DA-&amp;gt;&amp;gt;DA: Generates comprehensive plan
    DA-&amp;gt;&amp;gt;AC: Returns detailed infrastructure blueprint
    O-&amp;gt;&amp;gt;AC: Approves plan
    DA-&amp;gt;&amp;gt;DA: Generates code configurations
    DA-&amp;gt;&amp;gt;AC: Presents configurations in artifact pane
    O-&amp;gt;&amp;gt;VS: Opens in VS Code for the Web
    O-&amp;gt;&amp;gt;GH: Creates pull request
    GH-&amp;gt;&amp;gt;GH: CI/CD pipeline deploys infrastructure

    Note over O: Primary User
    Note over AC: Central Orchestrator
    Note over DA: Specialist Agent
    Note over GH: Version Control
    Note over VS: Development Environment
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;2-observability-agent-your-investigation-specialist&quot;&gt;2. Observability Agent: Your Investigation Specialist&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Observability Agent&lt;/strong&gt; transforms how you handle Azure Monitor alerts and incident investigation by providing deep, automated analysis and clear remediation paths.&lt;/p&gt;

&lt;h4 id=&quot;key-capabilities&quot;&gt;Key Capabilities&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Automated investigations&lt;/strong&gt;: Creates Azure Monitor issues and runs root cause analysis&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Contextual insights&lt;/strong&gt;: Leverages your specific environment data&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multi-alert correlation&lt;/strong&gt;: Identifies patterns across related alerts&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Actionable remediation&lt;/strong&gt;: Provides specific steps to resolve issues&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Support escalation&lt;/strong&gt;: Automatically creates support requests when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;practical-usage-patterns&quot;&gt;Practical Usage Patterns&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Direct Alert Investigation:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# When viewing an alert in Azure Portal&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Can you help investigate this alert?&quot;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# For specific alerts&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Start an investigation for my alert: /subscriptions/[...]/alerts/ALERT_ID&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Proactive Monitoring:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;What are the key alerts raised in the last 24 hours?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Show me any patterns in Application Insights failures&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;3-optimisation-agent-your-cost-and-performance-expert&quot;&gt;3. Optimisation Agent: Your Cost and Performance Expert&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Optimisation Agent&lt;/strong&gt; focuses on reducing costs and carbon emissions while maintaining performance, a critical capability for sustainable cloud operations.&lt;/p&gt;

&lt;h4 id=&quot;current-focus-areas&quot;&gt;Current Focus Areas&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Resource Types:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Virtual Machines (VMs)&lt;/li&gt;
  &lt;li&gt;Virtual Machine Scale Sets (VMSS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Optimisation Capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Detailed recommendations&lt;/strong&gt;: Specific actions with cost impact analysis&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Alternative options&lt;/strong&gt;: Multiple approaches for comparison&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Script generation&lt;/strong&gt;: Ready-to-execute PowerShell and Azure CLI commands&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Visual insights&lt;/strong&gt;: Charts showing expected results&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Carbon footprint&lt;/strong&gt;: Environmental impact analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;example-optimisation-workflow&quot;&gt;Example Optimisation Workflow&lt;/h4&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Request Optimisation] --&amp;gt; B[Agent Analyses Usage Patterns]
    B --&amp;gt; C[Identifies Opportunities]
    C --&amp;gt; D[Calculates Impact]
    D --&amp;gt; E[Generates Recommendations]
    E --&amp;gt; F[Creates Visual Charts]
    F --&amp;gt; G[Provides Scripts]
    G --&amp;gt; H{Approve Changes?}
    H --&amp;gt;|Yes| I[Execute Optimisations]
    H --&amp;gt;|No| J[Explore Alternatives]
    J --&amp;gt; E
    I --&amp;gt; K[Monitor Results]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style C fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#fff
    style D fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style E fill:#3b82f6,stroke:#2563eb,stroke-width:2px,color:#fff
    style F fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style G fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style H fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style I fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style J fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style K fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;sample-optimisation-requests&quot;&gt;Sample Optimisation Requests&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Subscription-wide Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Show me the top five cost-saving opportunities for subscription [GUID]&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Summarise total potential cost and carbon reduction from all active recommendations&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Resource-specific Optimisation:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Show me cost saving recommendations for [Resource URI]&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Is there an alternate recommendation for ContosoVM1?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Generate a PowerShell script to apply the recommended optimisations&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;4-resiliency-agent-your-business-continuity-guardian&quot;&gt;4. Resiliency Agent: Your Business Continuity Guardian&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Resiliency Agent&lt;/strong&gt; helps ensure your Azure resources can recover from failures, cyber attacks, data corruption, and datacentre outages.&lt;/p&gt;

&lt;h4 id=&quot;core-responsibilities&quot;&gt;Core Responsibilities&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Zonal resiliency configuration&lt;/strong&gt;: Multi-zone deployment strategies&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Backup management&lt;/strong&gt;: Azure Backup policy implementation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Disaster recovery&lt;/strong&gt;: Azure Site Recovery setup and management&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Security posture&lt;/strong&gt;: Recovery services security improvements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Compliance monitoring&lt;/strong&gt;: Backup and recovery compliance checking&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;zonal-resiliency-automation&quot;&gt;Zonal Resiliency Automation&lt;/h4&gt;

&lt;p&gt;The agent provides ready-to-deploy scripts for configuring zonal resiliency across supported services:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supported Services:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Virtual Machines&lt;/li&gt;
  &lt;li&gt;App Services&lt;/li&gt;
  &lt;li&gt;Azure Database for PostgreSQL&lt;/li&gt;
  &lt;li&gt;Azure Database for MySQL&lt;/li&gt;
  &lt;li&gt;SQL Managed Instance&lt;/li&gt;
  &lt;li&gt;Azure Cache for Redis&lt;/li&gt;
  &lt;li&gt;Azure Firewall&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;sample-resiliency-tasks&quot;&gt;Sample Resiliency Tasks&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure Hardening:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Configure zonal resiliency for this resource&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Which service groups are currently not zonally resilient?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Increase the security level of this vault&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Backup and Recovery:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;How many backup jobs failed in the last 24 hours?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Which data sources don&apos;t have a recovery point within the last 7 days?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Help me create vault ABC&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;5-troubleshooting-agent-your-technical-support-specialist&quot;&gt;5. Troubleshooting Agent: Your Technical Support Specialist&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Troubleshooting Agent&lt;/strong&gt; accelerates issue resolution by running diagnostics, providing solutions, and creating support requests when needed.&lt;/p&gt;

&lt;h4 id=&quot;advanced-capabilities&quot;&gt;Advanced Capabilities&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Root cause analysis&lt;/strong&gt;: Deep diagnostic investigation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;One-click fixes&lt;/strong&gt;: Automated resolution for common issues&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Support request generation&lt;/strong&gt;: Automated ticket creation with full context&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Resource-specific expertise&lt;/strong&gt;: Specialised knowledge for different Azure services&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;specialised-service-support&quot;&gt;Specialised Service Support&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Azure Cosmos DB:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Help me troubleshoot why my Cosmos DB Cassandra API is failing&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;I&apos;m trying to connect to Azure Cosmos DB from my local machine, but I keep getting a timeout&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Virtual Machines:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Help me investigate why my VM is unhealthy&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;I can&apos;t connect to my VM, can you help me troubleshoot?&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Azure Kubernetes Service:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Investigate the health of my pods&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Identify reasons for high CPU or memory usage in my AKS cluster&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;agent-orchestration-the-magic-of-intelligent-routing&quot;&gt;Agent Orchestration: The Magic of Intelligent Routing&lt;/h2&gt;

&lt;p&gt;What makes Azure Copilot Agents truly powerful is the intelligent orchestration. You don’t need to manually select which agent to use, the system automatically surfaces the right agent based on your request.&lt;/p&gt;

&lt;h3 id=&quot;how-orchestration-works&quot;&gt;How Orchestration Works&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[User Request] --&amp;gt; B[Azure Copilot Orchestration]
    B --&amp;gt; C{Request Analysis}

    C --&amp;gt;|&quot;Deploy infrastructure&quot;| D[Deployment Agent]
    C --&amp;gt;|&quot;Investigate alert&quot;| E[Observability Agent]
    C --&amp;gt;|&quot;Reduce costs&quot;| F[Optimisation Agent]
    C --&amp;gt;|&quot;Configure backups&quot;| G[Resiliency Agent]
    C --&amp;gt;|&quot;Fix connection issue&quot;| H[Troubleshooting Agent]

    D --&amp;gt; I[Specialised Response]
    E --&amp;gt; I
    F --&amp;gt; I
    G --&amp;gt; I
    H --&amp;gt; I

    I --&amp;gt; J[Cross-Agent Collaboration]
    J --&amp;gt; K[Unified Result]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style C fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style D fill:#3b82f6,stroke:#2563eb,stroke-width:2px,color:#fff
    style E fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#fff
    style F fill:#f59e0b,stroke:#d97706,stroke-width:2px,color:#fff
    style G fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff
    style H fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#fff
    style I fill:#64748b,stroke:#475569,stroke-width:2px,color:#fff
    style J fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#fff
    style K fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;cross-agent-collaboration&quot;&gt;Cross-Agent Collaboration&lt;/h3&gt;

&lt;p&gt;The real magic happens when agents work together. For example:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Troubleshooting Agent&lt;/strong&gt; identifies a performance issue&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Optimisation Agent&lt;/strong&gt; provides cost-effective solutions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Deployment Agent&lt;/strong&gt; generates infrastructure changes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Resiliency Agent&lt;/strong&gt; ensures the solution includes backup strategies&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Observability Agent&lt;/strong&gt; sets up monitoring for the new configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;getting-started-enabling-agent-mode&quot;&gt;Getting Started: Enabling Agent Mode&lt;/h2&gt;

&lt;p&gt;Using Azure Copilot Agents is straightforward once your tenant has access:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Azure Copilot Agents is currently in preview and access will be rolled out gradually over time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;step-1-enable-agent-mode&quot;&gt;Step 1: Enable Agent Mode&lt;/h3&gt;

&lt;p&gt;In Azure Copilot, start a conversation as you normally would, then select the agent mode icon.&lt;/p&gt;

&lt;h3 id=&quot;step-2-natural-language-requests&quot;&gt;Step 2: Natural Language Requests&lt;/h3&gt;

&lt;p&gt;Simply describe what you need in natural language:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;s2&quot;&gt;&quot;I need to set up a resilient web application with global load balancing&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;Why is my Application Insights showing high response times?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;What are the biggest cost optimisation opportunities in my environment?&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-3-review-and-approve&quot;&gt;Step 3: Review and Approve&lt;/h3&gt;

&lt;p&gt;Agents provide detailed plans and recommendations before taking any action. You maintain full control over what gets implemented.&lt;/p&gt;

&lt;h3 id=&quot;step-4-monitor-and-iterate&quot;&gt;Step 4: Monitor and Iterate&lt;/h3&gt;

&lt;p&gt;Use the unified interface to track agent progress, review results, and provide feedback for continuous improvement.&lt;/p&gt;

&lt;h2 id=&quot;enterprise-considerations-security-and-governance&quot;&gt;Enterprise Considerations: Security and Governance&lt;/h2&gt;

&lt;p&gt;Microsoft has built enterprise-grade controls into the agent experience, addressing critical concerns for production use.&lt;/p&gt;

&lt;h3 id=&quot;tenant-level-access-control&quot;&gt;Tenant-Level Access Control&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Gradual rollout&lt;/strong&gt;: Access is managed at the tenant level with gradual expansion&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Administrator control&lt;/strong&gt;: IT admins can enable/disable access and manage user groups&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit trail&lt;/strong&gt;: Complete logging of all agent activities&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Compliance integration&lt;/strong&gt;: Works within existing Azure governance frameworks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;security-best-practices&quot;&gt;Security Best Practices&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Built-in Protections:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Integration with Azure RBAC&lt;/li&gt;
  &lt;li&gt;Compliance with organisational policies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;privacy-and-data-handling&quot;&gt;Privacy and Data Handling&lt;/h3&gt;

&lt;p&gt;Microsoft has implemented strict data handling practices:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Conversations are encrypted and secured&lt;/li&gt;
  &lt;li&gt;No training data extraction from your environment&lt;/li&gt;
  &lt;li&gt;Compliance with enterprise privacy requirements&lt;/li&gt;
  &lt;li&gt;Integration with existing Azure security controls&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;current-limitations-and-future-roadmap&quot;&gt;Current Limitations and Future Roadmap&lt;/h2&gt;

&lt;h3 id=&quot;current-preview-limitations&quot;&gt;Current Preview Limitations&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Deployment Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Terraform configurations only (ARM and Bicep coming)&lt;/li&gt;
  &lt;li&gt;Greenfield deployments only (existing infrastructure import coming)&lt;/li&gt;
  &lt;li&gt;Manual CI/CD integration (automated pipelines coming)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Optimisation Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;VMs and VMSS only (more resource types coming)&lt;/li&gt;
  &lt;li&gt;No automatic execution (approval workflows coming)&lt;/li&gt;
  &lt;li&gt;Limited budget integration (full cost management coming)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Observability Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Application Insights alerts only (broader alert types coming)&lt;/li&gt;
  &lt;li&gt;Investigation only (automatic remediation coming)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Language Support:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Full support in English only&lt;/li&gt;
  &lt;li&gt;Limited support for other languages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;expected-enhancements&quot;&gt;Expected Enhancements&lt;/h3&gt;

&lt;p&gt;Microsoft has outlined several areas of active development:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expanded Resource Support:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;More resource types for optimisation&lt;/li&gt;
  &lt;li&gt;Broader troubleshooting capabilities&lt;/li&gt;
  &lt;li&gt;Enhanced resiliency configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deeper Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Native CI/CD pipeline creation&lt;/li&gt;
  &lt;li&gt;Advanced governance controls&lt;/li&gt;
  &lt;li&gt;Multi-cloud scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advanced Capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Predictive optimisation recommendations&lt;/li&gt;
  &lt;li&gt;Automated remediation with approval workflows&lt;/li&gt;
  &lt;li&gt;Cross-tenant collaboration for managed service providers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;strategic-implications-the-future-of-cloud-operations&quot;&gt;Strategic Implications: The Future of Cloud Operations&lt;/h2&gt;

&lt;p&gt;Azure Copilot Agents represents more than just new tooling, it’s a fundamental shift toward &lt;strong&gt;agentic cloud operations&lt;/strong&gt;. This transformation has several strategic implications:&lt;/p&gt;

&lt;h3 id=&quot;1-role-evolution&quot;&gt;1. Role Evolution&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cloud Architects&lt;/strong&gt; become orchestrators, focusing on:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Strategic planning and governance&lt;/li&gt;
  &lt;li&gt;Agent delegation and oversight&lt;/li&gt;
  &lt;li&gt;Cross-platform integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operations Engineers&lt;/strong&gt; shift from reactive to proactive:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Defining automation policies&lt;/li&gt;
  &lt;li&gt;Monitoring agent effectiveness&lt;/li&gt;
  &lt;li&gt;Continuous improvement processes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-skill-development&quot;&gt;2. Skill Development&lt;/h3&gt;

&lt;p&gt;New competencies become critical:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Agent prompt engineering&lt;/strong&gt;: Crafting effective requests&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Agentic workflow design&lt;/strong&gt;: Orchestrating multi-agent processes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;AI-human collaboration&lt;/strong&gt;: Working effectively with AI partners&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-organisational-changes&quot;&gt;3. Organisational Changes&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Faster Innovation Cycles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Rapid infrastructure experimentation&lt;/li&gt;
  &lt;li&gt;Automated compliance and security&lt;/li&gt;
  &lt;li&gt;Continuous optimisation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Improved Reliability:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Proactive issue detection&lt;/li&gt;
  &lt;li&gt;Consistent best practices application&lt;/li&gt;
  &lt;li&gt;Reduced human error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost Efficiency:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Automated optimisation recommendations&lt;/li&gt;
  &lt;li&gt;Resource right-sizing&lt;/li&gt;
  &lt;li&gt;Predictive capacity planning&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion-embracing-the-agentic-future&quot;&gt;Conclusion: Embracing the Agentic Future&lt;/h2&gt;

&lt;p&gt;Microsoft Ignite 2025’s Azure Copilot Agents announcement signals the beginning of truly agentic cloud operations. This isn’t just an incremental improvement, it’s a fundamental reimagining of how we interact with cloud infrastructure.&lt;/p&gt;

&lt;p&gt;The five specialised agents (Deployment, Observability, Optimisation, Resiliency, and Troubleshooting) work together as an expert team that never sleeps, never forgets best practices, and continuously learns from your environment. The intelligent orchestration means you focus on strategic decisions while agents handle operational execution.&lt;/p&gt;

&lt;h3 id=&quot;key-takeaways&quot;&gt;Key Takeaways&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Start experimenting now&lt;/strong&gt;: Request preview access and begin familiarising your team&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Plan for workflow changes&lt;/strong&gt;: Consider how agentic operations will transform your processes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Invest in agent skills&lt;/strong&gt;: Begin developing prompt engineering and AI collaboration competencies&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Prepare governance frameworks&lt;/strong&gt;: Establish controls and approval processes for agent activities&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Measure and iterate&lt;/strong&gt;: Track efficiency gains and optimise agent utilisation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The transformation is already underway. Organisations that embrace agentic cloud operations now will have a significant advantage in speed, reliability, and cost efficiency. The question isn’t whether this future will arrive, it’s whether you’ll be ready to lead in it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to start your agentic cloud operations journey?&lt;/strong&gt; Begin by exploring the &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/copilot/agents-preview&quot;&gt;Azure Copilot Agents documentation&lt;/a&gt; and requesting access for your organisation.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Have you started experimenting with Azure Copilot Agents? I’d love to hear about your experiences and what use cases you’re exploring. Share your thoughts and questions in the comments below.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 23 Nov 2025 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/azure-copilot-agents/</link>
        <guid isPermaLink="true">https://azurewithaj.com/azure-copilot-agents/</guid>
        
        <category>azure</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>ai</category>
        
        <category>agentic</category>
        
        <category>devops</category>
        
        <category>ignite</category>
        
        <category>operations</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
      <item>
        <title>Welcome Home, Agents: How GitHub Copilot Agent HQ is Transforming Development Workflows</title>
        <description>&lt;p&gt;The development landscape has fundamentally shifted. We’re no longer working with simple AI assistants that complete our code,we’re orchestrating fleets of specialised agents that can take on entire features, collaborate across tools, and work asynchronously while we sleep. GitHub’s announcement of &lt;strong&gt;Agent HQ&lt;/strong&gt; at Universe 2025 marks a pivotal moment in how we think about development workflows, and the accompanying VS Code updates make this vision tangible today.&lt;/p&gt;

&lt;p&gt;After spending the last few months working deeply with GitHub Copilot’s coding agent and now experimenting with the latest VS Code agent integrations, I’ve witnessed firsthand how this transformation changes everything from how we plan work to how we manage our development sessions. This isn’t hype,it’s a fundamental shift in how development teams operate.&lt;/p&gt;

&lt;h2 id=&quot;the-problem-fragmented-agent-experiences&quot;&gt;The Problem: Fragmented Agent Experiences&lt;/h2&gt;

&lt;p&gt;Before Agent HQ, working with AI agents felt like managing multiple contractors who all used different communication channels, had no visibility into each other’s work, and required constant context switching. You might have:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;GitHub Copilot coding agent&lt;/strong&gt; running on GitHub.com&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;VS Code local chat sessions&lt;/strong&gt; for immediate help&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; for terminal commands&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Third-party agents&lt;/strong&gt; like OpenAI Codex or Anthropic Claude in their native interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each operated in its own silo. You’d assign work to a coding agent on GitHub, switch to VS Code to write some code with chat assistance, jump to the terminal for CLI help, and then try to mentally piece together what was happening across all these sessions. The cognitive overhead was immense, and the lack of unified visibility meant agents couldn’t benefit from each other’s context.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Developer] --&amp;gt; B[GitHub Copilot on GitHub.com]
    A --&amp;gt; C[VS Code Chat Sessions]
    A --&amp;gt; D[GitHub Copilot CLI]
    A --&amp;gt; E[Third-Party Agents]

    B -.-&amp;gt;|No visibility| C
    C -.-&amp;gt;|No visibility| D
    D -.-&amp;gt;|No visibility| E
    E -.-&amp;gt;|No visibility| B

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;the-vision-agent-hq-as-your-development-command-centre&quot;&gt;The Vision: Agent HQ as Your Development Command Centre&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.blog/news-insights/company-news/welcome-home-agents/&quot;&gt;GitHub’s Agent HQ&lt;/a&gt; fundamentally reimagines this experience. Instead of disconnected tools, you get &lt;strong&gt;mission control&lt;/strong&gt;,a unified command centre that follows you wherever you work. Whether you’re in VS Code, on GitHub.com, using the CLI, or even on mobile, you have consistent visibility and control over all your agents.&lt;/p&gt;

&lt;p&gt;The core principle is elegant: &lt;strong&gt;GitHub is your Agent HQ&lt;/strong&gt;. It’s where agents live, work, and collaborate, just like human developers do through pull requests and issues.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Agent HQ: Mission Control] --&amp;gt; B[VS Code Sessions]
    A --&amp;gt; C[GitHub Copilot Coding Agent]
    A --&amp;gt; D[GitHub Copilot CLI]
    A --&amp;gt; E[Third-Party Agents]
    A --&amp;gt; F[Mobile/Web Access]

    B &amp;lt;--&amp;gt; C
    C &amp;lt;--&amp;gt; D
    D &amp;lt;--&amp;gt; E
    E &amp;lt;--&amp;gt; B

    G[Developer] --&amp;gt; A

    style A fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style G fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style F fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;the-game-changer-agent-sessions-view-in-vs-code&quot;&gt;The Game Changer: Agent Sessions View in VS Code&lt;/h2&gt;

&lt;p&gt;The October 2025 VS Code release (v1.106) brings Agent HQ directly into your editor with the &lt;strong&gt;Agent Sessions view&lt;/strong&gt;. This is now enabled by default and provides centralised management of all your active agent sessions, both local and remote.&lt;/p&gt;

&lt;h3 id=&quot;what-the-agent-sessions-view-gives-you&quot;&gt;What the Agent Sessions View Gives You&lt;/h3&gt;

&lt;p&gt;The Agent Sessions view is organised by source, making it easy to see exactly what’s happening across your development environment:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Local Chat Sessions&lt;/strong&gt;: Your VS Code chat conversations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Copilot Coding Agent&lt;/strong&gt;: Background agent sessions running on GitHub&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt;: Terminal-based agent sessions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Third-Party Agents&lt;/strong&gt;: Sessions from OpenAI Codex, Anthropic Claude, and others&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph LR
    A[Agent Sessions View] --&amp;gt; B[Local Sessions]
    A --&amp;gt; C[Coding Agents]
    A --&amp;gt; D[CLI Sessions]
    A --&amp;gt; E[Third-Party Agents]

    B --&amp;gt; B1[Chat Session 1]
    B --&amp;gt; B2[Chat Session 2]

    C --&amp;gt; C1[Issue #123: Add DNS Fallback]
    C --&amp;gt; C2[Issue #456: Fix Bug]

    D --&amp;gt; D1[Terminal Session 1]

    E --&amp;gt; E1[OpenAI Codex Session]
    E --&amp;gt; E2[Anthropic Claude Session]

    style A fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style B fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style C fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style D fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
    style E fill:#94a3b8,stroke:#64748b,stroke-width:2px,color:#0f172a
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;practical-workflow-with-agent-sessions&quot;&gt;Practical Workflow with Agent Sessions&lt;/h3&gt;

&lt;p&gt;Here’s how this changes your daily workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Morning Stand-up Scenario:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;p&quot;&gt;1.&lt;/span&gt; Open VS Code
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Check Agent Sessions view
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; See that the coding agent completed 3 PRs overnight
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Review the CLI agent&apos;s deployment preparation
&lt;span class=&quot;p&quot;&gt;5.&lt;/span&gt; Resume your local chat session from yesterday
&lt;span class=&quot;p&quot;&gt;6.&lt;/span&gt; All without leaving your editor
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can search sessions (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl+Alt+F&lt;/code&gt;), quickly jump between them, and see the status of background work at a glance. The view also supports a consolidated single-view mode if you prefer everything in one place.&lt;/p&gt;

&lt;h2 id=&quot;plan-agent-the-strategic-thinking-partner&quot;&gt;Plan Agent: The Strategic Thinking Partner&lt;/h2&gt;

&lt;p&gt;One of the most impactful additions is the &lt;strong&gt;Plan Agent&lt;/strong&gt;, available via the agents dropdown in the Chat view. This fundamentally changes how I approach complex features.&lt;/p&gt;

&lt;h3 id=&quot;why-planning-matters-more-than-ever&quot;&gt;Why Planning Matters More Than Ever&lt;/h3&gt;

&lt;p&gt;I’ve learned from my agentic DevOps journey that the quality of AI output directly correlates with the quality of planning input. The Plan Agent addresses this by helping you:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Break down complex tasks&lt;/strong&gt; into step-by-step implementation plans&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ask clarifying questions&lt;/strong&gt; to ensure all requirements are captured&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Identify dependencies&lt;/strong&gt; and potential issues before code is written&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Create a detailed blueprint&lt;/strong&gt; that you approve before implementation begins&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;how-we-can-use-the-plan-agent&quot;&gt;How We Can Use the Plan Agent&lt;/h3&gt;

&lt;p&gt;Here’s an example workflow:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Start with Feature Idea] --&amp;gt; B[Select Plan Agent]
    B --&amp;gt; C[Describe Feature Requirements]
    C --&amp;gt; D[Agent Asks Clarifying Questions]
    D --&amp;gt; E[Iterate on Requirements]
    E --&amp;gt; F[Review Generated Plan]
    F --&amp;gt; G{Plan Acceptable?}
    G --&amp;gt;|No| E
    G --&amp;gt;|Yes| H[Approve Plan]
    H --&amp;gt; I[Choose Implementation Method]
    I --&amp;gt; J[Local Implementation in VS Code]
    I --&amp;gt; K[Cloud Agent Implementation]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style H fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
    style G fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The beauty is that you invest time upfront in the plan, catching gaps and missing decisions early, before any code is written. This dramatically reduces rework and improves the final implementation quality.&lt;/p&gt;

&lt;h3 id=&quot;custom-plan-agents-for-your-team&quot;&gt;Custom Plan Agents for Your Team&lt;/h3&gt;

&lt;p&gt;VS Code also lets you create custom plan agents tailored to your organization’s workflows. Using the “Configure Custom Agent” menu, you can:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Copy the built-in plan agent as a starting point&lt;/li&gt;
  &lt;li&gt;Customise planning style to match your methodology (Agile, Waterfall, etc.)&lt;/li&gt;
  &lt;li&gt;Define specific tools and prompts for your domain&lt;/li&gt;
  &lt;li&gt;Set organization-specific guidelines and constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means your team can have consistent planning approaches while maintaining flexibility for different project types.&lt;/p&gt;

&lt;h2 id=&quot;cloud-agents-seamless-background-execution&quot;&gt;Cloud Agents: Seamless Background Execution&lt;/h2&gt;

&lt;p&gt;The October VS Code release migrated the Copilot coding agent integration from the GitHub Pull Request extension directly into the Copilot Chat extension. This might seem like a small technical change, but it’s actually huge for the user experience.&lt;/p&gt;

&lt;h3 id=&quot;what-changed-and-why-it-matters&quot;&gt;What Changed and Why It Matters&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Coding agent functionality felt bolted on, living in a separate extension with different behaviours and limited integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now:&lt;/strong&gt; Cloud agents are first-class citizens in VS Code, providing:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Native experience&lt;/strong&gt;: Same interface patterns as local chat&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bidirectional transitions&lt;/strong&gt;: Smoothly move between VS Code and GitHub Mission Control&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Unified context&lt;/strong&gt;: Cloud agents benefit from your local workspace context&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Consistent delegation&lt;/strong&gt;: Delegate work to cloud agents using familiar patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;example-cloud-agent-workflow&quot;&gt;Example Cloud Agent Workflow&lt;/h3&gt;

&lt;p&gt;Here’s how cloud agents fit into a typical development day:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gs&quot;&gt;**Morning:**&lt;/span&gt; Assign 3 issues to Copilot coding agent on GitHub.com

&lt;span class=&quot;gs&quot;&gt;**During the Day:**&lt;/span&gt; Work on other tasks, occasionally checking Agent Sessions view

&lt;span class=&quot;gs&quot;&gt;**Afternoon:**&lt;/span&gt; Coding agent creates PRs for 2 completed issues

&lt;span class=&quot;gs&quot;&gt;**Evening:**&lt;/span&gt; Review PRs in VS Code, provide feedback as PR comments

&lt;span class=&quot;gs&quot;&gt;**Overnight:**&lt;/span&gt; Coding agent iterates on feedback

&lt;span class=&quot;gs&quot;&gt;**Next Morning:**&lt;/span&gt; PRs ready to merge
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The key insight: &lt;strong&gt;You’re not blocked waiting for implementations&lt;/strong&gt;. You maintain momentum on strategic work while agents handle the execution heavy lifting.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;sequenceDiagram
    participant D as Developer
    participant GH as GitHub.com
    participant CA as Coding Agent
    participant VS as VS Code

    D-&amp;gt;&amp;gt;GH: Assign issues to @copilot
    activate CA
    CA-&amp;gt;&amp;gt;CA: Analyses requirements
    CA-&amp;gt;&amp;gt;CA: Implements features
    CA-&amp;gt;&amp;gt;GH: Creates PRs
    deactivate CA

    D-&amp;gt;&amp;gt;VS: Opens Agent Sessions view
    VS-&amp;gt;&amp;gt;GH: Fetches agent status
    GH-&amp;gt;&amp;gt;VS: Shows completed PRs

    D-&amp;gt;&amp;gt;VS: Reviews PR in editor
    D-&amp;gt;&amp;gt;GH: Adds review comments

    activate CA
    CA-&amp;gt;&amp;gt;GH: Reads feedback
    CA-&amp;gt;&amp;gt;CA: Implements changes
    CA-&amp;gt;&amp;gt;GH: Updates PR
    deactivate CA

    D-&amp;gt;&amp;gt;VS: Final review &amp;amp; merge
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;cli-agents-terminal-intelligence&quot;&gt;CLI Agents: Terminal Intelligence&lt;/h2&gt;

&lt;p&gt;The GitHub Copilot CLI integration brings agents directly into your terminal workflow. This is particularly powerful for complex command sequences and system administration tasks.&lt;/p&gt;

&lt;h3 id=&quot;how-cli-agents-work-in-vs-code&quot;&gt;How CLI Agents Work in VS Code&lt;/h3&gt;

&lt;p&gt;VS Code now provides two ways to work with CLI agents:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Chat Editor Mode&lt;/strong&gt;: Create CLI agent sessions in a dedicated editor&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Integrated Terminal Mode&lt;/strong&gt;: Run CLI agents directly in your terminal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Chat Editor Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Full chat interface with message history&lt;/li&gt;
  &lt;li&gt;Model switching capabilities&lt;/li&gt;
  &lt;li&gt;Context attachment from workspace files&lt;/li&gt;
  &lt;li&gt;Persistent sessions across VS Code restarts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Terminal Mode Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Natural command-line feel&lt;/li&gt;
  &lt;li&gt;Immediate execution in your shell environment&lt;/li&gt;
  &lt;li&gt;Integration with existing shell history&lt;/li&gt;
  &lt;li&gt;Quick access via terminal dropdown&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;practical-cli-agent-use-cases&quot;&gt;Practical CLI Agent Use Cases&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure Deployment:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# In CLI agent terminal&lt;/span&gt;
@copilot How &lt;span class=&quot;k&quot;&gt;do &lt;/span&gt;I deploy this Bicep template to multiple regions with different parameters?

&lt;span class=&quot;c&quot;&gt;# Agent provides step-by-step commands&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# You can execute them directly or ask for clarifications&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Attach error logs&lt;/span&gt;
@copilot /attach error.log
@copilot Why is this Azure Function failing to start?

&lt;span class=&quot;c&quot;&gt;# Agent analyses logs and suggests fixes&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;cli-edit-tracking&quot;&gt;CLI Edit Tracking&lt;/h3&gt;

&lt;p&gt;A particularly useful feature: chat edit sessions now track edits made by CLI agents. When you create sessions from the Agent Sessions view, you can see edits through:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Inline edit pills&lt;/strong&gt;: Visual indicators in your code&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Working set view&lt;/strong&gt;: Comprehensive list of all changed files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you maintain full visibility into what CLI agents modify, just like you would with local chat sessions or coding agents.&lt;/p&gt;

&lt;h2 id=&quot;agent-delegation-orchestrating-specialised-work&quot;&gt;Agent Delegation: Orchestrating Specialised Work&lt;/h2&gt;

&lt;p&gt;The delegation model is where Agent HQ truly shines. Instead of doing everything yourself, you can delegate specific tasks to the most appropriate agent for the job.&lt;/p&gt;

&lt;h3 id=&quot;how-delegation-works&quot;&gt;How Delegation Works&lt;/h3&gt;

&lt;p&gt;From any chat session, you can:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Identify specialised work&lt;/strong&gt;: “This needs deployment expertise”&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Use the cloud button&lt;/strong&gt;: Delegates to available agents&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Choose the agent&lt;/strong&gt;: Select from Copilot coding agent or third-party agents&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monitor progress&lt;/strong&gt;: Track in Agent Sessions view&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;From CLI to Coding Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/delegate&lt;/code&gt; command in CLI editors or terminal instances allows you to hand off work directly to the Copilot coding agent. This is incredibly useful when you realise a terminal task requires broader codebase changes.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# In CLI agent session&lt;/span&gt;
@copilot Create a deployment script &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;multi-region failover

&lt;span class=&quot;c&quot;&gt;# Agent realises this needs code changes&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# You delegate to coding agent&lt;/span&gt;
/delegate Create the deployment script and integrate with CI/CD pipeline

&lt;span class=&quot;c&quot;&gt;# Coding agent picks up work, creates branch, implements changes&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;delegation-strategy&quot;&gt;Delegation Strategy&lt;/h3&gt;

&lt;p&gt;A strategic mental model for choosing the right agent for each task:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Local Chat (VS Code)&lt;/strong&gt;: Quick questions, code explanations, immediate assistance&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Plan Agent&lt;/strong&gt;: Strategic planning, requirement refinement, architectural decisions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Coding Agent&lt;/strong&gt;: Feature implementation, bug fixes, pattern replication&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CLI Agent&lt;/strong&gt;: Deployment commands, system configuration, troubleshooting&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Third-Party Agents&lt;/strong&gt;: Specialised tasks (e.g., OpenAI Codex for Python, Claude for documentation)&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Development Task] --&amp;gt; B{Task Type?}

    B --&amp;gt;|Quick Question| C[Local VS Code Chat]
    B --&amp;gt;|Complex Feature| D[Plan Agent]
    B --&amp;gt;|Implementation| E[Coding Agent]
    B --&amp;gt;|Terminal/Deploy| F[CLI Agent]
    B --&amp;gt;|Specialised| G[Third-Party Agent]

    D --&amp;gt; H[Create Plan]
    H --&amp;gt; E

    C --&amp;gt; I{Needs More?}
    I --&amp;gt;|Yes| E
    I --&amp;gt;|No| J[Done]

    E --&amp;gt; K[Creates PR]
    K --&amp;gt; L[Review in VS Code]

    F --&amp;gt; M{Complex Changes?}
    M --&amp;gt;|Yes| E
    M --&amp;gt;|No| N[Execute Commands]

    style A fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    style B fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style I fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style M fill:#f59e0b,stroke:#d97706,stroke-width:3px,color:#fff
    style J fill:#059669,stroke:#047857,stroke-width:3px,color:#fff
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;custom-agents-tailoring-ai-to-your-workflow&quot;&gt;Custom Agents: Tailoring AI to Your Workflow&lt;/h2&gt;

&lt;p&gt;One of the most powerful features is the ability to create custom agents with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; files. These replace the previous “chat modes” and are now compatible across VS Code, GitHub Copilot Cloud Agents, and GitHub CLI.&lt;/p&gt;

&lt;h3 id=&quot;why-custom-agents-matter&quot;&gt;Why Custom Agents Matter&lt;/h3&gt;

&lt;p&gt;Custom agents let you:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Encode team knowledge&lt;/strong&gt;: Specific patterns, conventions, and best practices&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Create specialists&lt;/strong&gt;: Security-focused agents, testing agents, documentation agents&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Define workflows&lt;/strong&gt;: Multi-step processes unique to your organization&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Control behaviours&lt;/strong&gt;: Precise guardrails and guidelines for AI behaviour&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;creating-a-custom-agent&quot;&gt;Creating a Custom Agent&lt;/h3&gt;

&lt;p&gt;Custom agent files live in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/agents/&lt;/code&gt; and use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; suffix:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Generate an implementation plan for new features or refactoring existing code.&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Planner&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;vscode&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fetch&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;githubRepo&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;search&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;usages&quot;&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Claude Sonnet &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;handoffs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Implement Plan&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;agent&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Implement the plan outlined above.&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;gh&quot;&gt;# Planning instructions&lt;/span&gt;

You are in planning mode. Your task is to generate an implementation plan for a new feature or for refactoring existing code.
Don&apos;t make any code edits, just generate a plan.

The plan consists of a Markdown document that describes the implementation plan, including the following sections:
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; Overview: A brief description of the feature or refactoring task.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Requirements: A list of requirements for the feature or refactoring task.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Implementation Steps: A detailed list of steps to implement the feature or refactoring task.
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Testing: A list of tests that need to be implemented to verify the feature or refactoring task.
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;custom-agent-metadata&quot;&gt;Custom Agent Metadata&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;target&lt;/code&gt; property is particularly important as it determines how the agent runs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;target: vscode&lt;/code&gt;&lt;/strong&gt;: Optimised for local VS Code chat with access to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt;: Custom display name&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;description&lt;/code&gt;: Agent purpose&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;argument-hint&lt;/code&gt;: Guidance on prompting&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;model&lt;/code&gt;: Preferred AI model&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tools&lt;/code&gt;: Available VS Code tools&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;handoffs&lt;/code&gt;: Links to other agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;target: github-copilot&lt;/code&gt;&lt;/strong&gt;: Prepared for cloud agents and CLI with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt;: Display name&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;description&lt;/code&gt;: Purpose&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tools&lt;/code&gt;: Limited to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;edit&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;search&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;custom-agent&lt;/code&gt;, and MCP tools&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mcp-servers&lt;/code&gt;: Model Context Protocol server access&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;target&lt;/code&gt;: Deployment environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;agent-handoffs-workflow-orchestration&quot;&gt;Agent Handoffs: Workflow Orchestration&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;handoffs&lt;/code&gt; property enables guided transitions between agents, letting you chain multi-step workflows:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Feature Development Agent&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;handoffs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;plan-agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;testing-agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;security-agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;documentation-agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Workflow&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
1.&lt;/span&gt; Start with plan-agent for requirements
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Implement features
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; Hand off to testing-agent for test coverage
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Hand off to security-agent for security review
&lt;span class=&quot;p&quot;&gt;5.&lt;/span&gt; Hand off to documentation-agent for docs
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This creates a pipeline where each agent specialises in its domain, but they work together seamlessly.&lt;/p&gt;

&lt;h3 id=&quot;vs-code-agent-file-editing&quot;&gt;VS Code Agent File Editing&lt;/h3&gt;

&lt;p&gt;The VS Code editor now provides rich support for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.agent.md&lt;/code&gt; files:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt;: Real-time errors for invalid configurations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Code completions&lt;/strong&gt;: IntelliSense for properties and values&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hovers&lt;/strong&gt;: Documentation for each property&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Code actions&lt;/strong&gt;: Quick fixes and migrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s even an auto-migration feature for older &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.chatmode.md&lt;/code&gt; files with a quick fix to convert them to the new format.&lt;/p&gt;

&lt;h2 id=&quot;enterprise-considerations-control-and-governance&quot;&gt;Enterprise Considerations: Control and Governance&lt;/h2&gt;

&lt;p&gt;With great power comes great responsibility. Agent HQ includes enterprise-grade controls that I consider essential for production use.&lt;/p&gt;

&lt;h3 id=&quot;the-agent-control-plane&quot;&gt;The Agent Control Plane&lt;/h3&gt;

&lt;p&gt;GitHub’s control plane provides centralised governance for AI agents across your organization:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Agent Access Control&lt;/strong&gt;: Define which agents are allowed in your org&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Model Access Management&lt;/strong&gt;: Control access to specific AI models&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Security Policies&lt;/strong&gt;: Set organization-wide security rules&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit Logging&lt;/strong&gt;: Complete audit trails of agent activities&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Usage Metrics&lt;/strong&gt;: Understand Copilot usage across teams&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;branch-controls-for-agent-created-code&quot;&gt;Branch Controls for Agent-Created Code&lt;/h3&gt;

&lt;p&gt;Utilise branch controls provide granular oversight:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gu&quot;&gt;## Branch Protection for Agent PRs&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; CI required before allowing any modifications to agent PRs
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Status checks must pass before human review
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Draft PRs block GitHub Actions workflows by default
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Require approval from someone other than the task requester
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This ensures agent-created code goes through the same rigour as human-written code.&lt;/p&gt;

&lt;h3 id=&quot;identity-and-attribution&quot;&gt;Identity and Attribution&lt;/h3&gt;

&lt;p&gt;All agent work is properly attributed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Co-authored commits&lt;/strong&gt;: Shows both agent and human collaborator&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Session logs&lt;/strong&gt;: Complete transparency into agent decision-making&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Review requirements&lt;/strong&gt;: Enforces separation of duties&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Audit trails&lt;/strong&gt;: Full compliance documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;security-best-practices-with-agent-hq&quot;&gt;Security Best Practices with Agent HQ&lt;/h2&gt;

&lt;p&gt;Working with AI agents introduces new security considerations. Here’s how to maintain security hygiene while leveraging Agent HQ’s capabilities:&lt;/p&gt;

&lt;h3 id=&quot;1-start-with-recommended-defaults&quot;&gt;1. Start with Recommended Defaults&lt;/h3&gt;

&lt;p&gt;The built-in security protections are solid:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sandboxed execution environments&lt;/li&gt;
  &lt;li&gt;Read-only repository access&lt;/li&gt;
  &lt;li&gt;Branch naming restrictions (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;copilot/*&lt;/code&gt; only)&lt;/li&gt;
  &lt;li&gt;Branch protection compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-add-custom-instructions-for-security&quot;&gt;2. Add Custom Instructions for Security&lt;/h3&gt;

&lt;p&gt;In your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gu&quot;&gt;## Security Requirements&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; Never commit secrets, API keys, or passwords
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Use Azure Key Vault references for sensitive data
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; Implement least privilege access patterns
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; All security-sensitive changes require security-agent review
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;3-configure-firewall-settings&quot;&gt;3. Configure Firewall Settings&lt;/h3&gt;

&lt;p&gt;For enterprise environments, customise agent internet access:&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# Recommended: Allow specific internal resources&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;firewall&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;recommended_allowlist&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;custom_allowlist&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;domains&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;artifacts.company.internal&quot;&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;packages.company.internal&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;4-review-session-logs&quot;&gt;4. Review Session Logs&lt;/h3&gt;

&lt;p&gt;Make it a practice to review agent session logs at &lt;a href=&quot;https://github.com/copilot/agents&quot;&gt;github.com/copilot/agents&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Internal reasoning&lt;/strong&gt;: Understand the agent’s decision-making&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tool usage&lt;/strong&gt;: What commands were executed&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Code changes&lt;/strong&gt;: Complete diffs&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Test results&lt;/strong&gt;: Validation outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-github-mcp-registry-extending-agent-capabilities&quot;&gt;The GitHub MCP Registry: Extending Agent Capabilities&lt;/h2&gt;

&lt;p&gt;VS Code is the only editor that supports the full Model Context Protocol (MCP) specification, and the October release makes it even better with the GitHub MCP Registry integration.&lt;/p&gt;

&lt;h3 id=&quot;what-is-mcp&quot;&gt;What is MCP?&lt;/h3&gt;

&lt;p&gt;Model Context Protocol allows agents to interact with external services and data sources. Think of it as APIs for AI agents.&lt;/p&gt;

&lt;h3 id=&quot;one-click-mcp-server-installation&quot;&gt;One-Click MCP Server Installation&lt;/h3&gt;

&lt;p&gt;The GitHub MCP Registry in VS Code lets you:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Discover&lt;/strong&gt;: Browse available MCP servers (Stripe, Figma, Sentry, etc.)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Install&lt;/strong&gt;: One-click installation directly from VS Code&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Enable&lt;/strong&gt;: Instant availability for all agents&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Configure&lt;/strong&gt;: Workspace or user-level installation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means your agents can interact with your tools and services without custom integration work.&lt;/p&gt;

&lt;h3 id=&quot;creating-custom-agents-with-mcp-tools&quot;&gt;Creating Custom Agents with MCP Tools&lt;/h3&gt;

&lt;p&gt;Combine custom agents with MCP servers for powerful workflows:&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Deployment Agent&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;github-copilot&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;shell&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;custom-agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;mcp-servers&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;azure-mcp&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;datadog-mcp&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;gh&quot;&gt;# Deployment Specialist&lt;/span&gt;

You handle Azure deployments and monitoring.

When deploying:
&lt;span class=&quot;p&quot;&gt;
1.&lt;/span&gt; Use azure-mcp to validate resource configurations
&lt;span class=&quot;p&quot;&gt;2.&lt;/span&gt; Execute deployments via shell tool
&lt;span class=&quot;p&quot;&gt;3.&lt;/span&gt; Use datadog-mcp to set up monitoring
&lt;span class=&quot;p&quot;&gt;4.&lt;/span&gt; Create deployment documentation
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;example-workflow-putting-it-all-together&quot;&gt;Example Workflow: Putting It All Together&lt;/h2&gt;

&lt;p&gt;Let us walk through how we can use all these features together in a typical development scenario.&lt;/p&gt;

&lt;h3 id=&quot;scenario-adding-a-complex-feature-to-an-infrastructure-project&quot;&gt;Scenario: Adding a Complex Feature to an Infrastructure Project&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Planning with Plan Agent (10 minutes)&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;Me: I need to add geo-redundant disaster recovery to our Azure landing zone pattern

Plan Agent: [Asks clarifying questions about RPO/RTO requirements, budget constraints, region preferences]

[After discussion...]

Plan Agent: Here&apos;s your comprehensive plan with 4 phases, 15 tasks, dependencies mapped...
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create Backlog Items&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using the awesome-copilot prompts (via MCP server):&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;@copilot Use the create-github-issues-from-plan prompt to generate issues from this plan

[Generates 15 detailed GitHub issues with descriptions, acceptance criteria, dependencies]
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Delegate to Coding Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Assign issues to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@copilot&lt;/code&gt; on GitHub.com. Monitor progress via Agent Sessions view in VS Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Parallel Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While coding agent works on infrastructure, we use:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Local Chat&lt;/strong&gt;: Quick questions about Azure services&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CLI Agent&lt;/strong&gt;: Test deployment commands&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Custom Security Agent&lt;/strong&gt;: Review security implications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5: PR Reviews&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As PRs arrive:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Review in VS Code&lt;/li&gt;
  &lt;li&gt;Use custom testing agent to validate&lt;/li&gt;
  &lt;li&gt;Provide feedback as PR comments&lt;/li&gt;
  &lt;li&gt;Coding agent iterates automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use CLI agent to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Deploy to test environment&lt;/li&gt;
  &lt;li&gt;Run integration tests&lt;/li&gt;
  &lt;li&gt;Monitor with MCP-connected tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; Feature delivered in days instead of weeks, with consistent quality and complete documentation.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;gantt
    title Agent HQ Workflow Timeline
    dateFormat YYYY-MM-DD

    section Planning
    Plan Agent Discussion       :2025-11-20, 1d

    section Backlog
    Generate Issues             :2025-11-20, 1d

    section Development
    Coding Agent Work           :2025-11-21, 3d
    Parallel Local Development  :2025-11-21, 3d
    CLI Testing                 :2025-11-22, 2d

    section Review
    PR Reviews                  :2025-11-24, 2d
    Agent Iterations            :2025-11-24, 2d

    section Integration
    Deployment &amp;amp; Testing        :2025-11-26, 1d
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;whats-next-the-future-of-agent-hq&quot;&gt;What’s Next: The Future of Agent HQ&lt;/h2&gt;

&lt;p&gt;GitHub’s roadmap for Agent HQ is ambitious and exciting:&lt;/p&gt;

&lt;h3 id=&quot;upcoming-third-party-agents&quot;&gt;Upcoming Third-Party Agents&lt;/h3&gt;

&lt;p&gt;Over the coming months, agents from these providers will be available:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Anthropic Claude&lt;/strong&gt;: Deep reasoning and code analysis&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;OpenAI Codex&lt;/strong&gt;: Advanced code generation (already available in Insiders)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Google Jules&lt;/strong&gt;: Google’s coding agent capabilities&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cognition&lt;/strong&gt;: Specialised development workflows&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;xAI&lt;/strong&gt;: Elon Musk’s AI coding assistant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All accessible through your existing GitHub Copilot subscription, no additional accounts needed.&lt;/p&gt;

&lt;h3 id=&quot;enhanced-mission-control&quot;&gt;Enhanced Mission Control&lt;/h3&gt;

&lt;p&gt;Upcoming improvements to mission control:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Mobile app access&lt;/strong&gt;: Monitor agents from anywhere&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Slack/Linear/Teams integrations&lt;/strong&gt;: Agent notifications in your workflow tools&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Advanced delegation&lt;/strong&gt;: More sophisticated task routing&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multi-agent collaboration&lt;/strong&gt;: Agents working together on complex tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;code-quality-integration&quot;&gt;Code Quality Integration&lt;/h3&gt;

&lt;p&gt;GitHub Code Quality (in public preview) will integrate with Agent HQ to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Pre-review agent code&lt;/strong&gt;: Automated quality checks before human review&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Maintainability scoring&lt;/strong&gt;: Org-wide code health visibility&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Automatic remediation&lt;/strong&gt;: Agents fix quality issues proactively&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion-a-new-era-of-development&quot;&gt;Conclusion: A New Era of Development&lt;/h2&gt;

&lt;p&gt;Agent HQ represents a fundamental shift in how we think about development teams. We’re moving from a world where developers write all code to one where developers orchestrate specialised agents that handle implementation while humans focus on strategy, architecture, and quality.&lt;/p&gt;

&lt;p&gt;The VS Code October 2025 release makes this vision tangible. With the Agent Sessions view, Plan Agent, cloud agents, CLI integration, custom agents, and MCP support, we now have a cohesive environment for agentic development.&lt;/p&gt;

&lt;p&gt;What strikes me most is how natural it feels. Yes, there’s a learning curve and some rough edges to smooth out, but the core experience of working with agents through Agent HQ feels intuitive. It’s not bolted-on AI,it’s AI integrated into the development workflow we already know.&lt;/p&gt;

&lt;p&gt;The key insight: &lt;strong&gt;This isn’t about AI replacing developers. It’s about transforming development from a primarily solitary activity to an orchestrated collaboration between humans and specialised agents.&lt;/strong&gt; The developer’s role evolves from writing every line of code to designing systems, defining requirements, reviewing implementations, and making strategic decisions.&lt;/p&gt;

&lt;p&gt;For those of us who have spent years in DevOps, this is the natural evolution we’ve been working toward: automation that doesn’t just handle repetitive tasks but actively participates in the creative process of building software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to embrace Agent HQ?&lt;/strong&gt; Start small:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Enable the Agent Sessions view in VS Code&lt;/li&gt;
  &lt;li&gt;Try the Plan Agent for your next feature&lt;/li&gt;
  &lt;li&gt;Create one custom agent for your team’s domain&lt;/li&gt;
  &lt;li&gt;Delegate a well-defined task to the coding agent&lt;/li&gt;
  &lt;li&gt;Reflect on what worked and iterate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The future of development is here. Welcome home, agents.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Have you started working with Agent HQ and the new VS Code agent features? I’d love to hear about your experiences and what patterns you’ve discovered. Share your thoughts in the comments below.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 16 Nov 2025 19:00:00 +0000</pubDate>
        <link>https://azurewithaj.com/welcome-home-agents/</link>
        <guid isPermaLink="true">https://azurewithaj.com/welcome-home-agents/</guid>
        
        <category>github</category>
        
        <category>copilot</category>
        
        <category>agent</category>
        
        <category>devops</category>
        
        <category>agentic</category>
        
        <category>ai</category>
        
        <category>vscode</category>
        
        <category>hq</category>
        
        
        <category>DevOps</category>
        
        <category>AI</category>
        
      </item>
    
  </channel>
</rss>
