Shadow AI Is the New Shadow IT: Agent Inventory, Governance & the EU AI Act in 2026

·16 min read·Evergreen Tools Team

💡 Tool TipWhen rolling out agent governance, use Evergreen Tools' JSON Formatter to validate registries, Regex Tester to tune shadow-scan rules, and API Tester to verify governance endpoints!

A few years ago, employees buying their own SaaS tools created shadow IT. In 2026, employees building their own AI agents are creating shadow AI — unmanaged, unregistered, and potentially processing customer data. Governance stopped being a principle and became a date: Regulation (EU) 2026/1744, the Digital Omnibus on AI, entered into force on July 27, and Article 50 transparency obligations apply from August 2, 2026. This guide shows how to pull shadow AI into the light with an agent registry, a shadow scanner, and compliance disclosure code.

Agent security and governance

Governance became a date

1. Why Shadow AI Is Dangerous

The difference between agents and SaaS tools is permissions: agents read files, send messages, call APIs, and mutate data. One engineer connecting an unmanaged MCP server to customer PII is a potential breach. Microsoft Agent 365 is a precise answer to this: it discovers and governs agents you did not deploy, including third-party and open-source agents, syncs its registry to AWS Bedrock and Google Cloud, and detects shadow AI through Defender and Intune. Step one is always visibility — you cannot govern what you cannot see.

2. Build the Agent Registry

Code sample 1 is a JSON Schema for an agent registry: one row per agent with owner, deployment source (platform, department, or shadow), status, data categories, model, and MCP servers. This inventory is your governance baseline: approved agents go on the whitelist, everything else is shadow. Whether you buy Agent 365 or build it yourself, the schema is the same — the point is one source of truth.

// agent-registry.schema.json — the inventory every governed org needs
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["agentId", "owner", "status", "dataCategories"],
  "properties": {
    "agentId":        { "type": "string" },
    "name":           { "type": "string" },
    "owner":          { "type": "string" },
    "deployedBy":     { "enum": ["platform", "department", "shadow"] },
    "status":         { "enum": ["approved", "pending", "blocked", "retired"] },
    "dataCategories": { "type": "array", "items": { "type": "string" } },
    "model":          { "type": "string" },
    "mcpServers":     { "type": "array", "items": { "type": "string" } }
  }
}
# Agent 365 syncs its registry to AWS Bedrock and Google Cloud and
# detects shadow AI through Defender and Intune. The schema you need
# is the same whether you buy that or build it: one row per agent.

3. Scan for Unregistered Agents, Regularly

Code sample 2 is a shadow scanner: enumerate agents running in your tenant (MCP endpoints, cloud functions, scheduled jobs), diff against the approved registry, and report the unregistered set. Defender and Intune do this at scale for Microsoft tenants. The goal is not to ban agents — it is to see them, then decide. Scan results should flow into a review queue, not into an automatic kill switch.

# shadow-scan.py — find unregistered agents in your tenant
import json, subprocess, sys

KNOWN = set(json.load(open("agent-registry.json"))["approved"])

def list_running_agents():
    # Example: enumerate MCP endpoints, cloud functions, and scheduled jobs
    out = subprocess.run(["somectl", "list", "--json"], capture_output=True, text=True)
    return {row["id"]: row for row in json.loads(out.stdout)}

found = list_running_agents()
shadow = [aid for aid in found if aid not in KNOWN]

for aid in shadow:
    print(f"SHADOW: {aid} — not in approved registry")
print(f"summary: {len(shadow)} unregistered agent(s)")

# Defender and Intune do this at scale for Microsoft tenants.
# The point is not to block agents — it is to see them, then decide.

4. Article 50: The Obligation That Was Not Postponed

The headline of Regulation (EU) 2026/1744 is delay: Annex III high-risk systems (recruitment, credit scoring) moved to December 2, 2027, and AI embedded in regulated products moved to August 2, 2028. But Article 50 did not move — telling people they are interacting with an AI system and marking synthetic content still applies from August 2, 2026. Code sample 3 is a before-interaction disclosure function: a banner for chat, a spoken notice for voice, a subject prefix for email.

// article50.ts — enforce EU AI Act transparency before every interaction
type Interaction = { channel: "chat" | "voice" | "email"; synthetic?: boolean };

const DISCLOSURE = {
  en: "You are interacting with an AI system. Content may be AI-generated.",
  de: "Sie interagieren mit einem KI-System. Inhalte können KI-generiert sein.",
  fr: "Vous interagissez avec un système d'IA. Le contenu peut être généré par IA.",
};

export function beforeInteraction(i: Interaction) {
  // Article 50 (Regulation (EU) 2026/1744): transparency obligations
  // apply from 2 August 2026 — telling people they interact with AI
  // and marking synthetic content did NOT get postponed.
  if (i.channel === "voice") {
    return { play: DISCLOSURE.en, markSynthetic: i.synthetic ?? true };
  }
  if (i.channel === "email") {
    return { subjectPrefix: "[AI-GENERATED]", bodyNote: DISCLOSURE.en };
  }
  return { banner: DISCLOSURE.en };
}
# High-risk Annex III obligations moved to Dec 2, 2027; AI embedded in
# regulated products moved to Aug 2, 2028. The headline says delay —
# the obligation that touches marketing, HR and customer service did not.

5. Make Audits a Single SQL Query

The last piece of governance is the audit trail. Code sample 4 creates an agent_audit table recording every agent action: who, which agent, what data, approved or not. With a weekly rollup query, whatever an auditor asks, you answer with one SQL statement. Governance became a date — and the other side of that date is an evidence chain you can query at any time.

# audit-log.sql — every agent action, queryable for compliance
CREATE TABLE IF NOT EXISTS agent_audit (
  id            BIGSERIAL PRIMARY KEY,
  agent_id      TEXT NOT NULL,
  actor         TEXT NOT NULL,
  action        TEXT NOT NULL,
  data_scope    TEXT NOT NULL,      -- e.g. 'customer-pii' | 'internal-only'
  approved      BOOLEAN NOT NULL,
  occurred_at   TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- Weekly compliance rollup: who ran which agent on what data
SELECT agent_id, actor, data_scope, COUNT(*) AS actions
FROM agent_audit
WHERE occurred_at >= date_trunc('week', now())
GROUP BY agent_id, actor, data_scope
ORDER BY actions DESC;
# 'Governance stopped being a principle and became a date.'
# If an auditor asks, you can answer with one query.

6. Summary

The 2026 shadow-AI governance path is clear: a registry establishes the baseline, regular scans surface the shadows, Article 50 disclosure holds the line, and audit logs keep everything queryable. The EU postponed the high-risk obligations but kept transparency on schedule — which means every AI interaction facing EU users must be able to say 'I am AI' today. This is not optional. It is a date.

Cloud governance and compliance

Registry, scan, disclose, audit

📌 Frequently Asked Questions

What is shadow AI?

AI tools and agents that employees adopt or deploy without IT approval. Unlike shadow IT, agents hold real permissions — reading files, calling APIs, mutating data — so the risk is higher.

How do I discover shadow AI?

Maintain an approved agent registry and regularly scan for MCP endpoints, cloud functions, and scheduled jobs in your tenant, then diff the two. Defender and Intune provide this at scale for Microsoft tenants.

What are the key EU AI Act dates in 2026?

Regulation (EU) 2026/1744 entered into force July 27; Article 50 transparency applies from August 2, 2026; Annex III high-risk obligations moved to December 2, 2027; AI in regulated products moved to August 2, 2028.

What does Article 50 require?

Tell users they are interacting with an AI system and mark synthetic content. It applies across channels — chat, voice, email — and was not postponed.

How does Agent 365 help with governance?

It discovers and governs agents you did not deploy (including third-party and open-source), syncs the registry to AWS Bedrock and Google Cloud, and detects shadow AI via Defender and Intune.