Skip to content
UHPUHPDeveloper Guide
Independent resource · Not affiliated with HarnessRouter · Site data checked 13 Sep 2026

Comparison

UHP vs AG-UI

UHP standardizes execution through configured complete harnesses; AG-UI standardizes how user-facing applications exchange run input and events with agents. They address different boundaries and can be composed.

Verified: UHP: 2026-09-12AG-UI: intended 1.0 draft@ag-ui/core: 0.0.59

UHP and AG-UI standardize different interoperability planes. UHP 2026-09-12 defines a client-to-server contract for selecting, configuring and executing a complete agent harness. AG-UI defines an application-to-agent interaction contract: a user-facing application sends a run input and consumes an event stream for messages, tools, state, lifecycle and interactive continuation.

A product can therefore use both. A frontend could speak AG-UI to an agent-facing application layer while that layer uses UHP to run the selected underlying harness. The reviewed primary sources do not define a standard AG-UI↔UHP binding, and no native AG-UI surface in HarnessRouter was verified at this cutoff.

AG-UI’s repository describes it as the Agent-User Interaction Protocol, an open event-based protocol for connecting agents to user-facing applications. Its current specification material is explicitly marked draft, not yet ratified, describing intended 1.0 behavior without a compatibility promise until a version is frozen.

That status matters when comparing versions. The TypeScript package @ag-ui/core is currently 0.0.59 in the checked source tree, but that package version is not a ratified AG-UI protocol 1.0 version. The repository also publishes dated package release trains; the latest observed release at this cutoff is release/2026-09-11.

DimensionUHP 2026-09-12AG-UI intended 1.0 draft
Primary boundaryProduct/client ↔ UHP server ↔ configured complete harnessUser-facing application ↔ agent/runtime
Main unitHarness execution, configuration, session and response surfacesRun input plus producer→consumer event stream
IdentityHarnesses, responses, sessions and server resourcesthreadId, runId, optional parentRunId
InputUHP request surfaces select/configure the harness and execute workRunAgentInput requires thread, run and messages; may include context, tools, state, protocol version and resume data
ToolsHarness-owned runtime/tool configuration, including MCP and optional Harness PluginsFrontend tools advertised by the application and executed on the application side
StateSession/resource state is owned by the UHP server/harness boundaryShared application/agent state can be supplied and synchronized through protocol events
Interrupt / resumeHarness/session lifecycle through UHP’s execution modelDraft input includes resume data for interrupted interactive runs
VersioningDate-stamped UHP versions; current draft is 2026-09-12Draft proposes in-band protocolVersion negotiation and future frozen MAJOR.MINOR identifiers
UI semanticsUHP is not a user-interface protocolAG-UI directly targets user-facing interaction, including streaming and generative UI patterns
Current standard statusPublished UHP Draft with conformance package 2026.9.12Intended 1.0 draft; not yet ratified

The current draft uses one RunAgentInput to open an exchange. threadId, runId and messages are required; optional fields include parentRunId, protocolVersion, frontend tools, context, state, forwardedProps and resume.

The frontend-tool distinction is important. AG-UI describes tools in RunAgentInput as tools provided and executed by the application, not the agent backend. That is a different ownership boundary from configuring a complete harness or its MCP servers under UHP.

AG-UI also makes event finality visible. Its ecosystem uses lifecycle events such as RUN_STARTED, RUN_FINISHED and RUN_ERROR, alongside message, tool and state events. The repository’s own current integration tests explicitly distinguish a surface rendering from a run actually reaching RUN_FINISHED; this is application/agent event-stream finality, not UHP response conformance.

UHP uses a date-stamped protocol coordinate and a matching conformance package. AG-UI’s intended-1.0 draft instead describes in-band negotiation: the application may send RunAgentInput.protocolVersion, and the producer can report the negotiated version on RUN_STARTED.protocolVersion.

The draft also defines compatibility rules around additions and downgrade behavior: older peers should tolerate unknown additions, while a lossy downgrade should be surfaced rather than silently pretending equivalence. These are draft semantics until AG-UI freezes a version.

AG-UI’s first-party project description places it beside two other planes: MCP gives agents tools, A2A connects agents to agents, and AG-UI brings agents into user-facing applications. That model is useful, but UHP adds another distinct boundary: complete-harness execution and lifecycle behind a stable server contract.

A practical stack can therefore contain all four without treating them as substitutes:

  1. AG-UI for application/user ↔ agent interaction.
  2. UHP for application/service ↔ complete harness execution.
  3. MCP for agent/harness ↔ tools and context servers.
  4. A2A for agent ↔ remote agent collaboration.

The exact composition is implementation-specific. A translation layer between AG-UI and UHP would need explicit mappings for run/session identity, message and tool events, state, cancellation/finality and error semantics. No reviewed source establishes that mapping as a standard today.

  • AG-UI support in a framework does not imply native UHP support.
  • UHP conformance does not imply AG-UI compatibility.
  • @ag-ui/core 0.0.59 is an SDK coordinate, not a ratified protocol version.
  • AG-UI’s intended 1.0 draft should not be cited as a frozen compatibility contract.
  • The presence of MCP middleware inside the AG-UI repository does not merge MCP and AG-UI into one protocol boundary.
  • No native HarnessRouter AG-UI endpoint or UHP↔AG-UI adapter was verified in the reviewed HarnessRouter a7406cbd tree.