Skip to content

Machine-Readable Control Catalog

The 80 infrastructure controls are published as human-readable pages and as structured data, so security teams can ingest them programmatically instead of scraping HTML. The catalog is generated from a single source of truth and is byte-identical to the copy on airuntimesecurity.io, which is authoritative.

What is in it

Every one of the 80 controls, grouped into 11 domains, with the risk tiers it applies to, whether it is agentic, the behavioural layers it supports, and the runtime layer it most directly enables. The top level also carries the risk-tier model and the runtime-layer legend, so a consumer needs no other file to interpret a row.

Schema

catalog: AI Security Infrastructure Controls
version: "1.0.0"          # semver; bump on any control change
as_at: "2026-08-03"
authority: airuntimesecurity.io
license: MIT
risk_tier_model:
  named: [LOW, MEDIUM, HIGH, CRITICAL]
  simplified:              # the Tier 1/2/3 shorthand and its meaning
    "1": { named: [LOW, MEDIUM], meaning: "..." }
    "2": { named: [HIGH], meaning: "..." }
    "3": { named: [CRITICAL], meaning: "..." }
runtime_layers:            # legend for primary_runtime_layer_code
  L1: "Layer 01 - Guardrails (deterministic prevention)"
  L2: "Layer 02 - Model-as-Judge / reviewing (detection)"
  L3: "Layer 03 - Human Oversight (decision)"
  CB: "Circuit Breaker (containment, maps to PACE Emergency)"
total_controls: 80
domains:
  - slug: identity-and-access
    name: Identity & Access Management
    control_count: 8
    controls:
      - id: IAM-04
        title: Constrain agent tool invocation
        tier_applicability: "Tier 2+ (agentic)"   # human-readable
        min_tier: 2                                 # simplified 1/2/3; 1 == all tiers
        agentic: true
        behavioural_layers: [guardrails, model-as-judge, human-oversight]
        primary_runtime_layer: "Layer 01 - Guardrails"
        primary_runtime_layer_code: L1
        reference:
          aisecuredbydesign: "https://aisecuredbydesign.io/infrastructure/controls/identity-and-access/"
          airuntimesecurity: "https://airuntimesecurity.io/infrastructure/controls/identity-and-access/"

Field reference

Field Type Meaning
id string Stable control ID, e.g. IAM-04. Never reused.
title string Short control objective.
tier_applicability string Human-readable tier scope as shown on the control pages.
min_tier integer Lowest simplified tier the control applies to (1, 2, or 3). 1 means all tiers.
agentic boolean True if the control is specific to agentic (tool-using, code-running, delegating) systems.
behavioural_layers list Which of the three behavioural layers the control supports. Every control supports all three.
primary_runtime_layer string The runtime layer the control most directly enables.
primary_runtime_layer_code enum L1, L2, L3, or CB. See the handoff matrix.
reference object Canonical URLs for the control on each site.

Using it

import json, urllib.request

url = "https://airuntimesecurity.io/infrastructure/catalog/controls.json"
catalog = json.load(urllib.request.urlopen(url))

# Flatten to rows for a GRC register.
rows = [
    {
        "control_id": c["id"],
        "domain": d["name"],
        "objective": c["title"],
        "min_tier": c["min_tier"],
        "agentic": c["agentic"],
    }
    for d in catalog["domains"]
    for c in d["controls"]
]
print(f"Loaded {len(rows)} controls at catalog version {catalog['version']}")
# Every control that applies at Tier 2 or below (HIGH-risk systems).
curl -s https://airuntimesecurity.io/infrastructure/catalog/controls.json \
  | jq '[.domains[].controls[] | select(.min_tier <= 2) | .id]'
# Build an id -> primary runtime layer lookup for alert tagging.
curl -s https://airuntimesecurity.io/infrastructure/catalog/controls.json \
  | jq 'reduce (.domains[].controls[]) as $c ({}; . + {($c.id): $c.primary_runtime_layer_code})'
# Fail a pipeline if a service tagged CRITICAL is missing a mandatory control.
yq '.domains[].controls[] | select(.min_tier == 1) | .id' controls.yaml \
  > required-controls.txt
comm -23 required-controls.txt implemented-controls.txt \
  && echo "All baseline controls implemented."

Versioning

The catalog carries a semantic version. Any change to a control's ID, tier applicability, or layer mapping bumps the version. Pin to a version in automation and review the change before upgrading. The companion policy-as-code templates reference these same control IDs.

Do not hand-edit the data files

controls.yaml and controls.json are generated. Edit the source of truth and regenerate so both sites stay identical, rather than editing the published files directly.