ACF
acfstandard.io
Developer docs
FR
REASON

acf.assess-autonomy

Standalone autonomy decision: should the agent propose, decide or execute? Four input fields, one ACF® level (N0-N3) out, with go/no-go criteria, gating thresholds, and kill switch design.

!Warning
Preliminary assessment based on a deterministic four-dimension decision tree. requires_human_review is always true. The go/no-go criteria in the output are only valid after human review — this is not a go-live verdict.

When to use

Use this tool when the only blocking question is: “what ACF® autonomy level should this agent have?”. You already know what it does, you know what happens on error — you want a structured verdict on N0/N1/N2/N3 with the associated go/no-go criteria. It is the surgical version of classify-agent when only the autonomy axis is in debate.

It answers the DDAO question: “do we allow this agent to execute, or only to propose?”. The output includes a three-level kill switch design (freeze, redirect, revoke) directly usable in the ACF-07 card.

Input parameters

Five input fields, four of them required. Enums are strict.

agent_descriptionstring (10-1500)required
Short agent description (role, scope). Used in the rationale, not in the inference.
intended_actionsstring[] (1-20)required
List of intended actions. Verbs matter — “search”, “summari*”, “propose”, “suggest” push toward N0 if audit is internal and reversibility is full.
reversibility"fully" | "partially" | "irreversible"required
Reversibility of actions. “irreversible” + regulatory audit pushes to N2 minimum.
audit_requirements"none" | "internal" | "regulatory" | "forensic"required
Expected audit level. “regulatory” or “forensic” pushes to N1 minimum.
human_in_loop_cost"low" | "medium" | "high"
Cost of keeping a human in the loop. “high” + reversible actions + no audit allow N3.
locale"en" | "fr"default: "en"
Language of the textual output.

Output schema

Recommended level, go/no-go criteria, gating thresholds, kill switch design, referenced fiches, signed footer.

recommended_level{ level: "N0"|"N1"|"N2"|"N3", rationale: string }
ACF® level recommended by the decision tree and its rationale.
go_no_go_criteria{ criterion: string, status: "pass"|"conditional"|"fail" }[]
Five go-live validation criteria (DDAO mandate, kill switch, register, thresholds, DPO sign-off) with their inferred status.
gating_thresholds{ condition: string, escalation: string }[]
Blocking conditions and the matching escalation — directly usable in the ACF-12 mandate.
kill_switch_design{ levels: string[], response_time_s: number[] }
Three kill switch levels: freeze (instant), redirect (≤5 min), revoke (≤1 h).
referenced_fichesstring[]
ACF® cards to mobilise for the recommended level (e.g. ACF-07, ACF-09, ACF-12).
confidence"low" | "medium" | "high"
Global confidence of the recommendation.
assumptionsstring[]
Explicit assumptions made by the decision tree.
gaps_to_validatestring[]
Points to confirm in human review, notably PII (Article 35 DPIA) and quarterly kill switch testing.
rationale_per_rule{ rule_id, rule_version, fired, evidence }[]
Trace of the fired rule with its evidence (the concatenated input values).
requires_human_reviewtrue
Constant. No call returns false.

Example call

A procurement agent drafting purchase orders under EUR 5k:

assess-autonomy.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.assess-autonomy",
  arguments: {
    agent_description:
      "Procurement agent that drafts purchase orders for office supplies under EUR 5k and submits them to the ERP for approval.",
    intended_actions: [
      "draft purchase order from request",
      "validate vendor against approved list",
      "submit PO to ERP for human approval",
    ],
    reversibility: "partially",
    audit_requirements: "internal",
    human_in_loop_cost: "medium",
    locale: "en",
  },
});

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

Response

response.jsonjson
{
  "recommended_level": {
    "level": "N2",
    "rationale": "Partial reversibility with internal audit allows bounded N2 execution within a documented mandate."
  },
  "go_no_go_criteria": [
    { "criterion": "Mandate signed by the named DDAO", "status": "conditional" },
    { "criterion": "Kill switch documented and tested", "status": "fail" },
    { "criterion": "Decision register format defined", "status": "conditional" },
    { "criterion": "Escalation thresholds named in numeric terms", "status": "fail" },
    { "criterion": "Sign-off from DPO if PII transits the agent", "status": "conditional" }
  ],
  "gating_thresholds": [
    { "condition": "Any action above bounded perimeter", "escalation": "Block + DDAO ack before execution" },
    { "condition": "Drift > 10% on key metric vs baseline", "escalation": "Auto-suspend within 24h + post-mortem" },
    { "condition": "3 consecutive incidents in 24h", "escalation": "Auto-suspend + immediate DDAO review" }
  ],
  "kill_switch_design": {
    "levels": ["freeze (instant)", "redirect (≤5 min)", "revoke (≤1 h)"],
    "response_time_s": [5, 300, 3600]
  },
  "referenced_fiches": ["ACF-07", "ACF-09", "ACF-12", "ACF-05"],
  "confidence": "medium",
  "assumptions": [
    "Inference is deterministic over the 4 supplied dimensions; sector calibration not included."
  ],
  "gaps_to_validate": [
    "Confirm whether any intended action handles PII (Article 35 GDPR DPIA may apply).",
    "Confirm whether the kill switch has been tested in the last quarter."
  ],
  "requires_human_review": true,
  "rationale_per_rule": [
    {
      "rule_id": "assess-autonomy.decision-tree",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "reversibility=partially, audit=internal, hil_cost=medium"
    }
  ],
  "doctrine_version": "ACF framework v1.0 / rules 2026-06",
  "doctrine_hash": "sha256:bf0b6d8e4731ebdc58f6d6338702c5b74af47874cf0ad3dc958cde5c5b30b9dc",
  "doctrine_signature": "ed25519:…",
  "doctrine_archive_url": "https://acfstandard.io/doctrine/v1.0/archive.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-06-14T11:47:22.318Z",
  "disclaimer": "Preliminary qualification only — not legal advice. Human review required."
}

Common errors

  • InvalidEnumValue reversibility or audit_requirements receives an out-of-list value (e.g. reversibility: "reversible"). Fix to a canonical value.
  • InputTooShort agent_description < 10 chars or intended_actions empty. The tool does not guess — fix the input.
  • DoctrineSnapshotMismatch the requested doctrine_hash is not loaded. Update acf-mcp or point at the archived version.