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.
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)requiredautonomy_level"suggestive" | "co_decision" | "supervised_autonomous" | "autonomous"requiredrisk_level"low" | "medium" | "high" | "critical"requiredbudget_constraint"minimal" | "standard" | "comprehensive"locale"en" | "fr"default: "en"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[]ddao_controlsstring[]total_countnumberestimated_total_effort_daysnumberddao_summarystringconfidence"low" | "medium" | "high"assumptionsstring[]gaps_to_validatestring[]requires_human_reviewtrueExemple d’appel
Un agent d’achats en autonomie supervisée, plafonné à 50k EUR, criticité haute :
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
{
"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.
Outils liés
acf.classify-agent: obtenir autonomy_level + risk_level en amont, en un seul appel.acf.evaluate-agent-mandate: vérifier que les contrôles assignés sont bien repris dans le mandat avant sign-off DDAO.acf.map-ai-act-obligations: croiser les contrôles avec les obligations AI Act applicables pour éviter les doublons et les trous.