acf.assign-ddao-controls
ACF® control set scoped to an agent’s autonomy level and risk class, dual vocabulary (plain-English recommended_controls + canonical ddao_controls), estimated effort in days, and identified owners.
recommended_controls (business language for sponsor and audit) from ddao_controls (canonical ACF® vocabulary for the DDAO). This duality is what makes the assignment legible internally AND defensible externally. requires_human_review stays constant, the DDAO validates the actual cadence before any commit.When to use
Use this tool when an agent already has a delegated autonomy level (autonomy_level) and a criticality score (risk_level), and you now need the exact list of controls to enforce, what kill switches, what escalation thresholds, what logs, who owns each control, at what cadence it runs. This is the step that turns a qualification into an operational plan.
The board-level question the output answers: “How many DDAO-days does it cost, and who does what?” The estimated_total_effort_days gives a defensible order of magnitude for a financial sponsor; the recommended/ddao duality avoids vocabulary confusion between the business team and the DDAO.
Input parameters
Five fields, three required. The autonomy_level and risk_level must already be settled upstream (typically by acf.classify-agent or 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"Output schema
The output is a structured object containing two parallel control lists, the total estimated effort, and a summary ready to paste into the mandate (ACF-13).
recommended_controlsRecommendedControl[]ddao_controlsstring[]total_countnumberestimated_total_effort_daysnumberddao_summarystringconfidence"low" | "medium" | "high"assumptionsstring[]gaps_to_validatestring[]requires_human_reviewtrueExample call
A supervised autonomous procurement agent capped at 50k EUR, high criticality:
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));Response
{
"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."
}Common errors
- Invalid parameters: autonomy_level outside the 4 levels (suggestive, co_decision, supervised_autonomous, autonomous), including the former acf_level N0..N3, or risk_level outside low / medium / high / critical. The call fails with a JSON-RPC error whose message lists the offending fields.
- Low confidence: when few context fields are provided, confidence is low and assumptions states what was assumed. Complete the input before relying on the result.
Related tools
acf.classify-agent: obtain autonomy_level + risk_level upstream, in a single call.acf.evaluate-agent-mandate: verify that the assigned controls are actually carried into the mandate before DDAO sign-off.acf.map-ai-act-obligations: cross-check controls against applicable AI Act obligations to avoid duplicates and gaps.