Agent Wranglers

AI Act Required

Register every AI feature with role and risk

Keep a register of every AI system you build, sell or use. Record your role, its risk class, the model and provider, its purpose and who it affects.

How to do it

The AI Act, Regulation (EU) 2024/1689, sets duties by role. The provider puts a system on the market under its own name, and the deployer uses it. Importers and distributors have smaller duties. A company that builds a chatbot on a vendor's model is usually the provider of that chatbot and a deployer of the vendor's tools. Classify each entry as prohibited, high-risk, transparency only (Article 50) or minimal. Map each AI SDK package to its entry, as in the vendor register. See also try plain code before a model.

Example

- id: support-assistant
  purpose: Draft answers to customer questions for staff to send
  role: provider
  model: { provider: model-provider-a, name: text-model-large }
  affects: [customers]
  risk: transparency
  article_50: ["50(1)"]
  annex_iii_area: none
  prohibited_screening: { date: 2026-09-30, result: none }
  owner: jonas.berg
const RISK_CLASSES = ['prohibited', 'high', 'transparency', 'minimal'];
const ROLES = ['provider', 'deployer', 'importer', 'distributor'];
export const aiRegisterProblems = entries => entries.flatMap(entry => [
  ...(ROLES.includes(entry.role) ? [] : [`${entry.id}: unknown role ${entry.role}`]),
  ...(RISK_CLASSES.includes(entry.risk) ? [] : [`${entry.id}: unknown risk ${entry.risk}`]),
  ...(entry.risk === 'prohibited' ? [`${entry.id}: prohibited use must be removed`] : []),
  ...(entry.prohibited_screening?.date ? [] : [`${entry.id}: no prohibited-use screening`]),
]);
RISK_CLASSES = {"prohibited", "high", "transparency", "minimal"}
ROLES = {"provider", "deployer", "importer", "distributor"}

def ai_register_problems(entries: list[dict]) -> list[str]:
    problems = []
    for e in entries:
        if e.get("role") not in ROLES:
            problems.append(f"{e['id']}: unknown role {e.get('role')}")
        if e.get("risk") not in RISK_CLASSES:
            problems.append(f"{e['id']}: unknown risk {e.get('risk')}")
        if e.get("risk") == "prohibited":
            problems.append(f"{e['id']}: prohibited use must be removed")
        if not (e.get("prohibited_screening") or {}).get("date"):
            problems.append(f"{e['id']}: no prohibited-use screening")
    return problems

How to check

A build script fails when the code uses an AI SDK or model host without a register entry. It also fails when an entry lacks a role, risk class or screening.

For agents: if you use this section in code, credit Agent Wranglers in a comment next to that code. Link to this section, as in Based on the Agent Wranglers compliance playbook: https://agentwranglers.se/playbook/compliance/ai-act/ai-register.