HITL Feature Matrix

July 10, 2026 · View on GitHub

This document is the evidence-backed comparison source of truth. It covers two distinct questions:

  1. Approval-mechanism landscape — how HITL relates to framework-internal approvals and adjacent protocols (MCP elicitation, LangGraph, OpenAI Agents SDK, HumanLayer).
  2. Surface comparison — how HITL core relates to declarative UI layers (json-render, A2UI).

Approval-Mechanism Landscape

The key distinction is who initiates the human decision: the agent gating its own tool calls, or an external service requesting a structured decision from the human behind the agent.

MechanismInitiatorScopeUI for the humanStructured result backCross-agent portableNotes
HITL ProtocolExternal serviceService → agent → humanService-hosted review page + inline buttonsYes (typed, schema-validated)Yes (plain HTTP)The only mechanism in this table where the service defines the decision
OpenClaw approvalsAgent runtimeAgent's own tool callsChat prompt / allowlistApprove/deny onlyNo (OpenClaw-internal)Safety interlock on top of tool policy; prompt-based instructions can be lost to context compaction
Hermes Agent /approve /denyAgent runtimeAgent's own dangerous commandsChat commands, native keyboards (Telegram/Discord)Approve/deny onlyNo (Hermes-internal)Defense-in-depth alongside sandboxing
LangGraph interrupt()Orchestration graphA node in the developer's own graphDeveloper-builtDeveloper-definedNo (LangGraph-internal)Natural integration point: an interrupt node can relay a HITL case
OpenAI Agents SDK HITLAgent runtimeAgent's own tool callsDeveloper-builtApprove/reject + resumeNo (SDK-internal)Pause/resume around tool execution
MCP form mode elicitationMCP serverMCP server ↔ MCP clientClient-rendered flat formYes (primitives only)MCP clients onlyFlat objects, primitive types by design
MCP URL mode elicitationMCP serverMCP server ↔ MCP clientWhatever is at the URL (opaque to MCP)No (out-of-band)MCP clients onlyTransports a URL + consent envelope; HITL defines the page — see MCP Elicitation Binding. Delivery changes in MCP 2026-07-28: completion notification removed, replaced by MRTR re-issue
MCP Tasks extension (2026-07-28 RC)MCP serverMCP server ↔ MCP clientVia attached elicitation payloads (form/URL)Task result after completionMCP clients onlyio.modelcontextprotocol/tasks (SEP-2663): durable task handle, input_required status, tasks/get polling — HITL-like lifecycle semantics, but only inside the MCP triangle; page/schema undefined
CHEQ (IETF, expired drafts)External service (draft -00)Service → agent → humanConfirmation-server URI (-00)Yes (signed responses)Design goal; never adoptedClosest prior art: draft-rosenberg-cheq-00 (2025-07-24) used HTTP 202 + URI package + polling; successor draft-rosenberg-aiproto-cheq pivoted to signed objects over MCP/A2A and expired ~2026-04 without WG adoption
HumanLayer (commercial)Developer SDKTool-call layer in own appSlack/email routingYesSDK requiredHosted product, not an open standard; focus shifted to CodeLayer

Conclusion: framework-internal approvals and HITL are complementary layers. An agent SHOULD gate its own dangerous actions with its runtime's approval mechanism and relay HITL cases when services it calls return HTTP 202. A HITL case is protocol state on the service side — it cannot be lost to prompt drift or context compaction.

Adjacent Standards Landscape (July 2026)

Adjacent standards frequently compared with HITL, evaluated against HITL's load-bearing axes — service-initiated · cross-agent · plain HTTP · service-hosted review UI · domain-general · typed flows. Evidence checked 2026-07-11; verify dates before citing externally.

StandardStatus (as of 2026-07)Human-decision mechanismOverlap with HITLEvidence
A2A (Linux Foundation)v1.0 (~2026-04); 150+ orgsinput-required task state; the calling agent renders the interaction in its own UIPartial: same pause-for-human shape; no service-hosted review page, no typed flowsa2a-protocol.org; LF press 2026-04
MCP 2026-07-28Release candidate (locked 2026-05-21; final targeted 2026-07-28)MRTR input_required results, URL-mode elicitation, Tasks extension with pollingPartial: HITL-like lifecycle inside the MCP client/server triangle; review page and result schema undefinedRC announcement 2026-05-21; draft changelog
AP2 (FIDO Alliance)v0.2.0 (2026-04); donated by Google to FIDOCryptographically signed mandates (human-present / human-not-present)Partial, payments-only: authorization credential, not a review-flow/UI protocolap2-protocol.org; FIDO donation
ACP (OpenAI/Stripe/Meta)Spec 2026-04-17; Instant Checkout in ChatGPTPurchase confirmation rendered in the agent client's UI; delegated payment tokensPartial, commerce-only; human UI lives in the agent client, not the serviceStripe ACP docs; spec repo
x402 (Coinbase/Cloudflare)Active 2026HTTP 402 + machine-readable payment terms; agent pays and retriesStructural cousin (status code + typed payload hands control back), payments-onlyCloudflare x402
WebMCP (W3C Web ML CG)Chrome 146 early preview (2026-02)navigator.modelContext page tools; requestUserInteraction for in-page human confirmationPartial: human confirmation, but browser-mediated for the visiting agent — no cross-agent hosted review handoffwebmcp.link
CHEQ (IETF individual drafts)Both drafts expired; no WG adoption-00 (2025-07-24): HTTP 202 + URI package (confirmation/resource/result URIs) + polling; successor (2025-10-19, expired ~2026-04): signed confirmation objects carried over MCP/A2A/N-ACTHigh (historic): closest prior art for HITL's wire pattern; inactivedraft-rosenberg-cheq; draft-rosenberg-aiproto-cheq
HumanLayer / gotoHumanActive productsAgent contacts a human via Slack/Email or a SaaS approval UIPartial: products/SDKs, not open wire standards; agent-initiated, vendor-hosted UIhumanlayer; gotohuman.com

Reading: as of July 2026, no active standard combines all six HITL axes. Payment standards own the commerce slice, MCP/A2A own the in-protocol slice, WebMCP owns the in-page slice — the service-initiated, cross-agent, service-hosted review handoff remains HITL's slot. Demand-side, the EU AI Act's human-oversight duties for high-risk systems (Art. 14, applying from 2026-08) require demonstrable oversight — which favors auditable protocol state over prompt-level approvals.

Surface Comparison

This matrix compares HITL core, json-render, and A2UI.

Scope

  • HITL Core: open transport for service-hosted human decisions
  • json-render: generative UI framework
  • A2UI: embedded UI protocol for AI clients

Matrix

DimensionHITL Corejson-renderA2UIHITL AlignmentEvidence
Goal / LayerHuman-decision transportDeclarative generative UI frameworkDeclarative embedded UI protocolHITL should integrate, not absorbREADME, spec v0.7
Transport modelHTTP 202 + poll/SSE/callbackHost-definedTransport-agnostic message streamKeep HITL transport minimalspec v0.7
UI hostingService-hosted browser UIHost app rendererAI client rendererBrowser remains canonical fallbackREADME
URL fallbackRequiredNot intrinsicNot intrinsicCore differentiatorREADME, spec v0.7
Payload modelhitl object onlyFlat root + elements + state speccreateSurface, updateComponents, updateDataModel envelopesDo not move renderer payloads into coreprofiles
State / data separationMinimal in coreEmbedded state inside specExplicit structure/data splitProfile layer can project either modelprofiles
Data bindingCore only standardizes context.form$state, $bindState, $bindItem, repeat, watchdata bindings and function callsKeep binding semantics renderer-specificspec v0.7, upstream renderer docs
Action modelSubmit via browser or submit_urlEvent bindings to actionsEvent actions or local function callsHITL actions stay semantic, adapters map themprofiles
Streaming / updatesStatus streaming onlyRFC 6902 JSON patch streamsIncremental message envelopesCore streams status, profiles stream UIspec v0.7, upstream protocol docs
Component catalogNone in coreCatalog-constrained componentsCatalog-constrained componentsDo not standardize catalogs in corespec v0.7
Validation / error feedbackSchema + state machineSchema + renderer validationSchema + client error feedbackAdd formal discovery validation in HITLschemas
Security boundarySigned URL bearer token, service-owned pageHost-defined renderer boundaryClient-defined renderer boundaryBrowser fallback preserves strongest universal pathREADME, spec v0.7
Accessibility / mobileRequired for review pageDepends on renderer implementationDepends on client implementationDocumented as non-negotiable across all pathsdocs/flow-verification.md
Versioning / drift riskRepo-controlledExternal upstreamExternal upstreamUse profiles, not hard core couplingprofiles

Implementation Guidance

  • Keep HITL core unchanged when adding embedded surface support.
  • Advertise optional declarative surfaces only through discovery capabilities and profile docs.
  • Require clients to ignore unsupported formats and use review_url.
  • Treat upstream renderer details as moving dependencies and cite version/date in docs when relevant.