Skip to main content
The inventory is a worklist, not a dashboard. Every row is an AI service somebody reached from a managed device, and every row wants one of three decisions. Open it at Runtime Security → Shadow AI.

The worklist

Figures

Filters

One search box over host and provider, a row of state chips, and quiet scoping controls on the right. Chips only appear when they can match something, so an empty Workflow chip means no automation platform has been seen at all.

Columns

Click any row to expand it. The detail strip shows Why this ranking (the reasons behind the risk level), exact first and last seen timestamps, and the three action buttons.

How risk is ranked

Risk is derived from signals the inventory already carries. There is no hidden score and no model: recognition, capability, and exposure. Unknown hosts rank high because nobody has verified where the data goes. Workflow platforms rank high because an AI step inside an automation can relay records between systems without a human in the loop. Device spread ranks high because a tool on twenty laptops is a policy problem, not an individual one.

When the automatic action passes a service over

A workspace can set Newly discovered AI so that anything the fleet finds is inspected, or protected, or blocked, without waiting for a person. That action does not reach every discovered row, and the row now says so rather than leaving you to guess. Only a corroborated candidate is acted on automatically. A host the classifier recognised on a single weak signal stays a candidate for a person to decide about, and a host nobody probed is acted on only when its name alone clears the bar. The bar is deliberate. An earlier build promoted a bank to protected off a single refused request, and a rule that decrypts a bank on one weak signal is worse than a service nobody inspected. Anything held back is still listed, still ranked, and can be inspected or blocked by hand in one click; the automation simply will not decide for you.
Risk is only meaningful for undecided services. Anything sanctioned, blocked, or managed resolves to low by definition, so the worklist shows — rather than pretending the ranking still says something.

The decisions

All of these require the endpoint.ai_services.manage permission (formerly runtime_security.ai_services.manage, see Endpoint permissions) and write an audit record. Three of them are decisions about the service, and they move status:
Onboarding used to create the App and push no rule at all, which left the service governed on paper but never decrypted. It now writes its own inspect rule, so the one status that means “fully managed” gets the full treatment. If you onboarded a service before August 2026 and added the inspect rule by hand, that rule is yours and is left alone.

Protect: inspect without deciding

Protect is not a decision about whether the company wants the service, so it leaves status alone and the row stays in the review queue. Protect is the middle ground between letting something happen unseen and banning it: you get visibility and redaction on a tool nobody has vetted, without breaking anybody’s day while you decide.
Protect and unprotect are refused with 409 on a service somebody has already blocked or onboarded, because either one writes a rule that lets traffic through:
  • On a blocked service, protecting it would un-ban it. Sanction it first if you want it inspected rather than denied.
  • On an onboarded service, either one is a way to stop it being fully inspected. It is already inspected, and protect is the weaker posture: it can never block a prompt.

Which decision to reach for

A weekly triage pass

1

Filter to Needs review, sorted by highest risk

The default sort already does this. Set the time range to the last 7 days for the new arrivals, or all time to clear the backlog.
2

Start with the unknown hosts

Expand each row and read Why this ranking. Resolve the hostname: is it an internal gateway, a new vendor, or something nobody can account for?
3

Check exposure before deciding

A service on one device is usually a person to talk to. A service on twenty is a policy to write. Use the device and user filters to see who is behind it.
4

Decide

Sanction, block, or onboard. Every row you leave undecided is a row the report will call ungoverned.
5

Confirm the block landed

Blocked services push a host rule to the fleet. Policy propagates within about 30 seconds, or immediately if you Push policy from Endpoint → Devices.

Insights

Runtime Security → Shadow AI → Insights is the read on the estate, where the worklist is the read on individual services. It deliberately repeats nothing from the inventory. The trend needs at least a day of rollup data. Until agents have reported, it says so rather than drawing a flat zero line.

Export the report

Export on the Shadow AI page generates a PDF built server-side. The report leads with a narrative summary, then the risk-ranked inventory, the traffic trend against the prior period, exposure breakdowns, and a methodology section that states plainly that detection is passive and destination-only.
Sanctioned services are approved tools, not shadow AI, so they are excluded from the report everywhere: the table, the totals, and the breakdowns. The inventory in the console still shows them, filtered behind the Sanctioned chip.
Filenames are stamped, shadow-ai-report-20260729.pdf or shadow-ai-summary-20260729.pdf, so a monthly export drops cleanly into an evidence folder.

API

The discovery routes live under /api/runtime-security/ and use the same workspace authentication as the rest of the dashboard API. endpoint.discovery.view reads; endpoint.ai_services.manage acts.
Both permissions were renamed in August 2026. Reading the inventory used to require the endpoint policy key, which took Shadow AI away from roles that could see Runtime Security but were never given policy read, so the inventory now has a permission of its own. See Endpoint permissions.
{id} is the service’s uuid. Every decision route returns the updated service row. GET /discovery accepts status, days, device_id, and user query parameters, matching the console’s filters:

Audit trail

Every decision is recorded in the audit trail against the rs_discovered_service entity, with the acting user and the hostname. Forward them to your SIEM with the audit webhook if shadow-AI decisions are part of your control evidence.

Common workflows

  1. Run the fleet observe-only for two weeks.
  2. Export the full report for the last 14 days.
  3. Walk the risk drivers and the department breakdown with the data-protection owner.
  4. Decide the enforcement policy with real numbers rather than hypotheticals.
  1. Chip: High risk. Sort: Most devices.
  2. Work top-down. Broad exposure first, since it affects the most people.
  3. Blocked services push a host rule immediately; tell the affected teams before you block a tool they use daily.
  1. Set the User filter to a team member, or read the department breakdown on Insights.
  2. Switch the drill-down between device and user while staying filtered, the breakdowns stay populated.
  3. Sanction the tools the team genuinely needs and onboard the one handling sensitive data.
  1. Onboard as app on the row. An App is created and linked.
  2. Configure thresholds, custom PII rules, and tool policy on the new App, see Apps.
  3. Add an inspect host rule for the hostname pointing at that App, in Endpoint policy → AI host rules.
  4. Confirm events start arriving with source=agent in Observability.
  1. Export the full report with Anonymize on if the audience should not see identities.
  2. Pair it with the audit trail export for the same period, which carries the decisions and who made them.
  3. The methodology section states the detection limits explicitly, which is usually the auditor’s first question.