ACF
acfstandard.io
Developer docs
EN
REASON

acf.classify-agent

Qualification préliminaire d’un agent IA avant go-live, dix champs énumérés en entrée, une évaluation structurée en sortie : niveau d’autonomie, criticité, rôle AI Act, obligations applicables, contrôles DDAO, sign-offs requis.

!Attention
Cet outil produit une qualification préliminaire, pas un avis juridique. requires_human_review vaut toujours true en sortie. Tous les champs énumérés sont stricts, l’entrée est rejetée plutôt que devinée.

Quand l’utiliser

Utilisez cet outil quand un système d’IA arrive avant son go-live et qu’il faut un premier verdict structuré sur cinq questions en parallèle : à quel niveau d’autonomie il opère, quelle criticité il porte, quel rôle régulatoire il occupe (AI Act + RGPD), quels contrôles mettre en place, et qui doit signer son passage en production. L’outil agrège les cinq verdicts en un seul appel.

Ce n’est pas un outil de production : c’est un outil de cadrage. La sortie est conçue pour entrer dans une fiche ACF-08 (Dossier Premier Agent) que le DDAO va revoir et compléter.

Paramètres d’entrée

Dix champs principaux, tous obligatoires sauf indication contraire. Les énumérations sont strictes, l’outil rejette l’entrée plutôt que de deviner.

namestring (2-200)required
Nom court de l’agent. Ce nom apparaît dans le rationale et l’audit trail.
descriptionstring (20-1000)required
Description prose de ce que l’agent fait, où il agit, sur quels actifs. Plus c’est précis, plus l’inférence est solide.
decisions_takenstring[] (1-20)required
Liste des décisions opérationnelles que l’agent prend (« attribue un score », « envoie un email », « écrit dans Salesforce »…).
human_approval_required"always" | "sometimes" | "never"required
À quelle fréquence un humain valide-t-il les décisions ? Influe directement sur le niveau d’autonomie inféré.
personal_data_level"none" | "standard" | "sensitive_special"required
Niveau de données personnelles manipulées. sensitive_special couvre santé, données biométriques, opinion politique, etc.
financial_exposure"none" | "low_operation" | "medium_contract" | "high_corporate"required
Exposition financière par décision. medium_contract = engagement contractuel ; high_corporate = trading, transfert massif.
external_actions"none" | "read_only" | "limited_write" | "full_write"required
Capacité d’écriture sur des systèmes externes (CRM, ERP, banque, API tierces).
gpai_usedbooleanrequired
Le système utilise-t-il un GPAI (LLM généraliste type GPT, Claude, Gemini, Mistral) en sous-couche ? Active les obligations AI Act Art. 51-55.
usage_audience"internal" | "third_party_b2b" | "public_consumer"required
Qui voit la sortie ? public_consumer engage davantage le RGPD et les obligations de transparence.
sectorstring (≤80)
Secteur d’activité, libre (« banque », « healthtech », « public sector »…). Aide la pondération de la criticité.
jurisdiction("eu" | "uk" | "us" | "ca" | "ch" | "br" | "jp" | "other")[]
Juridictions où l’agent opère. Active l’AI Act EU + autres référentiels.
ai_act_triggersAiActTriggerEnum[]
Déclencheurs Annex III explicites (biométrie, infrastructure critique, recrutement, scoring crédit…) ou « none ».
processing_purposesProcessingPurposeEnum[]
Finalité du traitement RGPD (RH, marketing, financier, support, santé, public, conformité…).
locale"en" | "fr"default: "en"
Langue de la sortie textuelle.

Schéma de sortie

La sortie est un objet structuré, suivi du pied-de-page signé de la doctrine.

autonomy_level{ level: "suggestive"|"co_decision"|"supervised_autonomous"|"autonomous", rationale: string }
Niveau d’autonomie déléguée recommandé pour les décisions de l’agent, et son rationale. Renommé depuis acf_level en 2.0.0 : N0 à N3 désigne désormais la maturité de l’agent, pas l’autonomie d’une décision.
criticality{ score: "low"|"medium"|"high"|"critical", rationale, matrix_ref }
Score de criticité issu de la Matrice de Criticité (ACF-03), avec référence à la cellule de la matrice.
regulatory_qualifications{ likely_ai_act_role, likely_gdpr_status }
Rôle AI Act probable (provider, deployer, importer, distributor…) et statut RGPD probable (controller, processor, joint controller).
ai_act_obligations{ pre_go_live[], continuous[], on_incident[] }
Obligations AI Act ventilées par phase du cycle de vie, avec article + exigence + date d’applicabilité.
applicable_fiches{ code: string, why: string }[]
Fiches du toolkit ACF® à mobiliser (parmi les 45 : ACF-01 à ACF-20, ACF-O1 à ACF-O10, ACF-P1 à ACF-P15), avec la raison pour chaque fiche retenue.
recommended_controlsstring[]
Contrôles en langage naturel, destinés à l’équipe métier.
ddao_controlsstring[]
Mêmes contrôles, vocabulaire canonique ACF® (codes C-AUTONOMY-XX, C-LOG-XX, etc.), destinés au DDAO.
ddao_escalation{ required: boolean, trigger_thresholds: string[] }
L’escalade DDAO est-elle requise ? Si oui, sur quels seuils ?
sign_off_required{ security, privacy, compliance, legal, business_sponsor, board: boolean }
Qui doit signer le go-live ? Six rôles internes possibles.
confidence"low" | "medium" | "high"
Niveau de confiance global de la qualification.
assumptionsstring[]
Hypothèses explicites prises pour produire la qualification.
gaps_to_validatestring[]
Trous identifiés que le revue humaine doit combler.
requires_human_reviewtrue
Constant. Aucun appel ne le retourne false.

Exemple d’appel

Un agent qui qualifie les leads B2B entrants d’un éditeur de logiciel :

classify-agent.tstypescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({
  command: "npx",
  args: ["-y", "acf-mcp"],
});
const client = new Client({ name: "demo", version: "1.0" }, {});
await client.connect(transport);

const result = await client.callTool({
  name: "acf.classify-agent",
  arguments: {
    name: "B2B lead-qualification agent",
    description:
      "Receives raw inbound leads from the website form, enriches them with public LinkedIn data, scores them on fit, and writes a category to Salesforce.",
    decisions_taken: [
      "assign a fit score 0-100",
      "tag as MQL or disqualified",
      "write the result to the Salesforce lead record",
    ],
    human_approval_required: "sometimes",
    personal_data_level: "standard",
    financial_exposure: "low_operation",
    external_actions: "limited_write",
    gpai_used: true,
    usage_audience: "internal",
    sector: "saas",
    jurisdiction: ["eu", "uk"],
    ai_act_triggers: ["none"],
    processing_purposes: ["marketing"],
    locale: "en",
  },
});

console.log(JSON.stringify(result.content, null, 2));

Réponse

response.jsonjson
{
  "autonomy_level": {
    "level": "supervised_autonomous",
    "rationale": "Conditional human approval, write actions allowed within a bounded perimeter → conditional execution (mandate required)."
  },
  "criticality": {
    "score": "medium",
    "rationale": "Standard personal data + low operational exposure → medium criticality (GDPR + operational impact).",
    "matrix_ref": "cell(standard, low_operation)"
  },
  "regulatory_qualifications": {
    "likely_ai_act_role": "deployer",
    "likely_gdpr_status": "controller"
  },
  "regulatory_qualifications_confidence": {
    "likely_ai_act_role": "high",
    "likely_gdpr_status": "high"
  },
  "ai_act_obligations": {
    "pre_go_live": [
      {
        "article": "art-50",
        "requirement": "Transparency obligations on AI systems intended to interact with natural persons (clear notice that the user is interacting with an AI system, unless obvious from context).",
        "applicable_date": "2026-08-02"
      }
    ],
    "continuous": [
      {
        "article": "art-51",
        "requirement": "Classification of GPAI models and identification of systemic-risk models.",
        "applicable_date": "2026-08-02"
      },
      {
        "article": "art-53",
        "requirement": "Technical documentation, training data summary, copyright policy, instructions for downstream providers.",
        "applicable_date": "2026-08-02"
      },
      {
        "article": "art-54",
        "requirement": "Authorised representative requirement for non-EU GPAI providers placing models on the EU market.",
        "applicable_date": "2026-08-02"
      }
    ],
    "on_incident": []
  },
  "applicable_fiches": [
    {
      "code": "ACF-13",
      "why": "Formal mandate required once the agent decides on its own (supervised autonomous or autonomous)."
    },
    {
      "code": "ACF-07",
      "why": "Kill switch required once the agent decides on its own (supervised autonomous or autonomous)."
    },
    {
      "code": "ACF-09",
      "why": "Decision register required once the agent decides on its own (supervised autonomous or autonomous)."
    }
  ],
  "recommended_controls": [
    "Formal agent mandate",
    "Kill switch quarterly drill",
    "Decision register",
    "Quarterly risk review"
  ],
  "ddao_controls": [
    "ACF-CTRL-101 (preventive, ACF-13): Mandate templates calibrated by sector; review frequency tied to criticality.",
    "ACF-CTRL-102 (corrective, ACF-07): Kill switch with 3 levels: freeze (instant), redirect (≤5min), revoke (≤1h).",
    "ACF-CTRL-103 (detective, ACF-09): Decision register format aligned with Article 49 register for high-risk systems."
  ],
  "ddao_escalation": {
    "required": false,
    "trigger_thresholds": [
      "Action above bounded perimeter escalates to DDAO before execution.",
      "Drift > 10% on key metric vs baseline escalates within 24h."
    ]
  },
  "sign_off_required": {
    "security": true,
    "privacy": true,
    "compliance": false,
    "legal": false,
    "business_sponsor": true,
    "board": false
  },
  "confidence": "medium",
  "assumptions": [],
  "gaps_to_validate": [],
  "requires_human_review": true,
  "rationale_per_rule": [
    {
      "rule_id": "ai-act-annex-iii.annex-iii-1a-biometric-identity",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-2-critical-infrastructure",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-3-educational",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-4-employment",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-5b-credit-scoring",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-5c-insurance-pricing",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-6-law-enforcement",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-7-migration-asylum",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-8-justice-democracy",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-medical-device",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-vehicle-safety",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-machinery",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "gpai-triggers",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:gpai_used=true"
    },
    {
      "rule_id": "ai-act-roles.ai-act-role-deployer-internal-use",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:usage_audience=internal"
    },
    {
      "rule_id": "gdpr-qualification.gdpr-controller-internal-use",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:usage_audience=internal; enum:personal_data_level=standard"
    },
    {
      "rule_id": "sign-off-matrix.medium-standard-low_operation",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "criticality=medium, pii=standard, fin=low_operation"
    },
    {
      "rule_id": "ddao-controls-mapping.supervised_autonomous-high",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "level=supervised_autonomous, risk=medium"
    },
    {
      "rule_id": "autonomy-inference.supervised_autonomous",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "human_approval=sometimes, ext=limited_write"
    },
    {
      "rule_id": "criticality-matrix.standard-low_operation",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "pii=standard, fin=low_operation"
    }
  ],
  "doctrine_version": "ACF framework v1.0 / rules 2026-06",
  "doctrine_hash": "sha256:119819463363cde0649504ab8ed5a96982fdb8506441f2c5e76e7e3c3feb77f1",
  "doctrine_signature": "ed25519:3R0oIiqL3Kgd…",
  "doctrine_archive_url": "https://acfstandard.io/archive/doctrine/v1.0/doctrine-v1.0.json",
  "regulatory_snapshot": "EU AI Act (Reg. 2024/1689, incl. Digital Omnibus deferral) + GDPR (Reg. 2016/679) + DORA (Reg. 2022/2554) + NIS2 (Dir. 2022/2555) + ISO 42001:2023: as of 2026-06-07",
  "generated_at": "2026-11-01T12:06:31.055Z",
  "disclaimer": "Preliminary qualification produced by the ACF® deterministic engine. Not legal advice. Human review required. Do not use for autonomous regulatory decision-making. See doctrine_archive_url for the version of the doctrine used.",
  "conversion_cta": "Generate the full auditable PDF report on https://acfstandard.com/compliance?ref=mcp"
}

Erreurs courantes

  • Paramètres invalides : un des champs énumérés (human_approval_required, personal_data_level, financial_exposure, external_actions, usage_audience) hors de ses valeurs, ou decisions_taken vide. L’appel échoue avec une erreur JSON-RPC dont le message liste les champs en cause.
  • Confiance basse : quand peu de champs de contexte sont fournis, confidence vaut low et assumptions dit ce qui a été supposé. Complétez l’entrée avant de vous appuyer sur le résultat.