ACF
acfstandard.io
Developer docs
EN
REASON

acf.assign-ddao-controls

Jeu de contrôles ACF® calé sur le niveau d’autonomie et la classe de risque d’un agent, double vocabulaire (recommended_controls en langage métier + ddao_controls canoniques), effort estimé en jours et propriétaires identifiés.

→Astuce
La sortie distingue volontairement recommended_controls (langage métier pour le sponsor et l’audit) de ddao_controls (vocabulaire canonique ACF® pour le DDAO). Cette dualité est ce qui rend l’assignation lisible en interne ET défendable en externe.requires_human_review reste constant, le DDAO valide la cadence réelle avant tout commit.

Quand l’utiliser

Utilisez cet outil quand un agent a déjà un niveau d’autonomie déléguée (autonomy_level) et un score de criticité (risk_level), et qu’il faut maintenant la liste exacte des contrôles à imposer, quelles kill switches, quels seuils d’escalade, quels logs, qui possède chaque contrôle, à quelle fréquence il s’exécute. C’est l’étape qui transforme une qualification en plan opérationnel.

La question board que la sortie tranche : « Combien ça coûte en jours-DDAO, et qui fait quoi ? » L’estimated_total_effort_days donne un ordre de grandeur défendable devant un sponsor financier ; la dualité recommended/ddao évite la confusion vocabulaire entre l’équipe métier et le DDAO.

Paramètres d’entrée

Cinq champs, dont trois obligatoires. Le autonomy_level et le risk_level doivent déjà avoir été tranchés en amont (typiquement par acf.classify-agent ou acf.assess-autonomy).

agent_descriptionstring (10-500)required
Description courte de l’agent. Sert au DDAO summary et au rationale, ne pilote pas le choix des contrôles (c’est level × risk qui le fait).
autonomy_level"suggestive" | "co_decision" | "supervised_autonomous" | "autonomous"required
Niveau d’autonomie déléguée pour la décision : suggestif (l’agent suggère, un humain décide), co-décision (l’agent propose, un humain valide), autonome supervisé (l’agent décide sous supervision), autonome (l’agent décide seul dans son mandat). Pilote la sévérité du jeu de contrôles. Renommé depuis acf_level en 2.0.0.
risk_level"low" | "medium" | "high" | "critical"required
Classe de risque issue de la Matrice de Criticité (ACF-03). Combinée à autonomy_level, elle détermine la cellule de mapping.
budget_constraint"minimal" | "standard" | "comprehensive"
Contrainte budgétaire. minimal = on garde les deux premiers contrôles (kill switch + log) ; standard = jeu canonique complet ; comprehensive = jeu canonique complet sans coupe.
locale"en" | "fr"default: "en"
Langue de la sortie textuelle (titres de contrôles, summary).

Schéma de sortie

La sortie est un objet structuré contenant deux listes parallèles de contrôles, l’effort estimé total et un résumé prêt à coller dans le mandat (ACF-13).

recommended_controlsRecommendedControl[]
Contrôles en langage métier, id, title, description, owner, frequency (one_time / monthly / quarterly / annual / on_event), evidence_storage. Coupés à 2 si budget_constraint = minimal.
ddao_controlsstring[]
Mêmes contrôles en vocabulaire canonique ACF®, codes ACF-CTRL-XXX, chacun rattaché à sa fiche de référence. Format prêt à coller dans le mandat (ACF-13).
total_countnumber
Total de contrôles toutes listes confondues (recommended + ddao).
estimated_total_effort_daysnumber
Effort cumulé en jours-personne basé sur la fréquence de chaque contrôle (one_time=5, monthly=1, quarterly=2, annual=4, on_event=1).
ddao_summarystring
Phrase de synthèse prête à coller dans le mandat (ACF-13) signé par le DDAO.
confidence"low" | "medium" | "high"
Niveau de confiance global. High dès que (level, risk) est dans la matrice canonique sans contradiction.
assumptionsstring[]
Hypothèses explicites, en V1.0, pas de surcharge sectorielle (un agent bancaire hérite des mêmes contrôles qu’un agent de e-commerce pour le même couple niveau/risque).
gaps_to_validatestring[]
Trous à valider par le DDAO, disponibilité réelle pour la cadence proposée, lieu de stockage des preuves.
requires_human_reviewtrue
Constant. Aucun appel ne retourne false.

Exemple d’appel

Un agent d’achats en autonomie supervisée, plafonné à 50k EUR, criticité haute :

assign-controls.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.assign-ddao-controls",
  arguments: {
    agent_description:
      "Autonomous procurement agent that places purchase orders up to 50k EUR against pre-approved suppliers and writes the result to SAP.",
    autonomy_level: "supervised_autonomous",
    risk_level: "high",
    budget_constraint: "standard",
    locale: "en",
  },
});

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

Réponse

response.jsonjson
{
  "recommended_controls": [
    {
      "title": "Formal agent mandate",
      "description": "Mandate document signed by DDAO defining decision perimeter, escalation thresholds and kill switch.",
      "owner_role": "ddao",
      "frequency": "quarterly",
      "evidence_artifact": "agent-mandate.pdf"
    },
    {
      "title": "Kill switch quarterly drill",
      "description": "Test the agent freeze/redirect/revoke path on a non-production replay every quarter.",
      "owner_role": "ciso",
      "frequency": "quarterly",
      "evidence_artifact": "drill-report.pdf"
    },
    {
      "title": "Decision register",
      "description": "Immutable timestamped log of every decision with structured inputs, output, doctrine version.",
      "owner_role": "ddao",
      "frequency": "on_event",
      "evidence_artifact": "decision-register.jsonl"
    },
    {
      "title": "Quarterly risk review",
      "description": "Review of risk profile, drift metrics and incidents over the quarter.",
      "owner_role": "ddao",
      "frequency": "quarterly",
      "evidence_artifact": "risk-review-minutes.pdf"
    }
  ],
  "ddao_controls": [
    {
      "control_id": "ACF-CTRL-101",
      "control_type": "preventive",
      "fiche_reference": "ACF-13",
      "implementation_note": "Mandate templates calibrated by sector; review frequency tied to criticality."
    },
    {
      "control_id": "ACF-CTRL-102",
      "control_type": "corrective",
      "fiche_reference": "ACF-07",
      "implementation_note": "Kill switch with 3 levels: freeze (instant), redirect (≤5min), revoke (≤1h)."
    },
    {
      "control_id": "ACF-CTRL-103",
      "control_type": "detective",
      "fiche_reference": "ACF-09",
      "implementation_note": "Decision register format aligned with Article 49 register for high-risk systems."
    }
  ],
  "total_count": 7,
  "estimated_total_effort_days": 7,
  "ddao_summary": "Control set scoped to ACF® supervised_autonomous / risk=high (4 recommended controls, 3 ACF-canonical controls).",
  "confidence": "medium",
  "assumptions": [
    "Controls are derived from the canonical level × risk mapping; sector-specific overrides not applied in V1.0."
  ],
  "gaps_to_validate": [
    "Confirm DDAO availability for the proposed escalation cadence.",
    "Confirm evidence-storage location for each control before go-live."
  ],
  "requires_human_review": true,
  "rationale_per_rule": [
    {
      "rule_id": "ddao-controls-mapping.supervised_autonomous-high",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "level=supervised_autonomous, risk=high"
    }
  ],
  "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.046Z",
  "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."
}

Erreurs courantes

  • Paramètres invalides : autonomy_level hors des 4 niveaux (suggestive, co_decision, supervised_autonomous, autonomous), y compris l’ancien acf_level N0..N3, ou risk_level hors low / medium / high / critical. 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.