Skip to Content
GovernanceHuman Oversight (Article 14)

Human Oversight (EU AI Act Article 14)

Verify your agents have human-in-the-loop controls for high-risk actions.

Deadline: August 2, 2026

EU AI Act Article 14 enforcement begins. Non-compliance penalties up to 15M or 3% of global turnover.

What is Article 14?

EU AI Act Article 14 requires high-risk AI systems to be designed with human oversight capabilities:

High-risk AI systems shall be designed and developed in such a way… that they can be effectively overseen by natural persons during the period in which they are in use.

Specifically, Article 14 requires:

  1. Understanding - Humans can interpret the system’s capabilities and limitations
  2. Interpretation - Humans can correctly interpret outputs
  3. Override - Humans can override or interrupt the system’s operation
  4. Safe Halt - A “stop button” brings the system to a safe halt

What Inkog Detects

Inkog’s universal_missing_oversight rule detects when high-risk actions lack human approval gates.

Detection Rule

id: universal_missing_oversight title: Missing Human Oversight for High-Risk Actions severity: HIGH category: governance compliance_mapping: eu_ai_act: ["Article 14.1", "Article 14.4"] nist_ai_rmf: ["GOVERN 4.1"] iso_42001: ["7.2"]

What Triggers Detection

PatternDetectedExplanation
ToolCall without preceding HumanApprovalNodeYesHigh-risk tool with no approval gate
graph.add_edge(A, B) where B is high-riskYesDirect path to dangerous action
Missing interrupt_before in graph compileYesNo interruption point configured
human_input=False on high-risk crewYesHuman input explicitly disabled

Framework-Specific Patterns

LangGraph

LangGraph uses interrupt_before to pause execution for human review.

Vulnerable Pattern

from langgraph.graph import StateGraph graph = StateGraph(TradeState) graph.add_node("analyze", analyze_market) graph.add_node("execute", execute_trade) graph.add_edge("analyze", "execute") # Direct path - no human check! # VULNERABLE: No interrupt_before app = graph.compile()

Compliant Pattern

from langgraph.graph import StateGraph graph = StateGraph(TradeState) graph.add_node("analyze", analyze_market) graph.add_node("human_review", wait_for_approval) graph.add_node("execute", execute_trade) graph.add_edge("analyze", "human_review") graph.add_edge("human_review", "execute") # COMPLIANT: Interrupt before execution app = graph.compile(interrupt_before=["execute"])

CrewAI

CrewAI uses human_input=True to require human confirmation.

Vulnerable Pattern

from crewai import Crew, Process crew = Crew( agents=[analyst, trader], tasks=[analyze_task, trade_task], process=Process.sequential, # VULNERABLE: No human input required )

Compliant Pattern

from crewai import Crew, Process crew = Crew( agents=[analyst, trader], tasks=[analyze_task, trade_task], process=Process.sequential, human_input=True, # COMPLIANT: Requires human confirmation )

LangChain

LangChain uses approval callbacks or custom middleware.

Vulnerable Pattern

from langchain.agents import AgentExecutor agent_executor = AgentExecutor( agent=agent, tools=tools, # VULNERABLE: No approval mechanism )

Compliant Pattern

from langchain.agents import AgentExecutor def require_approval(tool_input): """Custom approval callback.""" print(f"Agent wants to execute: {tool_input}") approval = input("Approve? (yes/no): ") if approval.lower() != "yes": raise ValueError("Action not approved") return tool_input agent_executor = AgentExecutor( agent=agent, tools=tools, handle_tool_error=True, callbacks=[ApprovalCallback()], # COMPLIANT: Approval callback )

Microsoft Copilot Studio

Copilot Studio uses approval nodes in topic flows.

Vulnerable Pattern

topics: - id: "delete-account" nodes: - id: "get-email" type: "question" - id: "delete" type: "powerautomate" # VULNERABLE: Direct deletion, no approval

Compliant Pattern

topics: - id: "delete-account" nodes: - id: "get-email" type: "question" - id: "confirm" type: "approval" properties: approvers: ["manager@company.com"] timeout: 24h - id: "delete" type: "powerautomate" # COMPLIANT: Approval required before deletion

High-Risk Actions

Not all actions require human oversight. Focus on:

CategoryExamples
FinancialTransactions, payments, refunds
Data DeletionAccount deletion, record purging
Access ChangesPermission grants, role modifications
External CommunicationEmails, notifications, API calls
Irreversible ActionsAny action that cannot be undone

Compliance Evidence

Inkog generates Article 14 compliance evidence:

{ "article_mapping": { "Article 14": { "status": "PASS", "description": "Human Oversight", "finding_count": 0, "details": { "approval_gates_found": 3, "high_risk_actions_protected": true, "interrupt_points_configured": true } } } }

Remediation Steps

  1. Identify high-risk actions in your agent workflow
  2. Add approval gates before each high-risk action
  3. Configure interrupt points in graph compilation
  4. Test the approval flow to ensure it works
  5. Run Inkog to verify compliance
# Verify human oversight is configured inkog . --policy governance # Check Article 14 specifically inkog . --policy eu-ai-act
Last updated on