Summary
Add an AG-UI protocol surface to Forge agents: an inbound HTTP endpoint that accepts an AG-UI RunAgentInput and streams the agent run back as AG-UI events over Server-Sent Events. This lets any AG-UI-aware frontend (CopilotKit, the AG-UI Dojo, custom React UIs) drive a Forge agent with no bespoke wiring.
AG-UI is a protocol surface, not agent behavior. It is the sibling of the existing A2A server — an HTTP handler on the same mux — not a skill (no SKILL.md) and not a channel adapter (channels are outbound-only; AG-UI is inbound).
In scope (v1: streaming chat)
- Lifecycle events:
RUN_STARTED, RUN_FINISHED, RUN_ERROR
- Text message events:
TEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT, TEXT_MESSAGE_END (whole-turn content — see limitation in §3)
- Backend tool-call events:
TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END, TOOL_CALL_RESULT — i.e. the agent's own (backend-executed) tool calls, surfaced to the UI for visibility
Out of scope (explicitly do not implement in this round)
- Frontend tool calls / human-in-the-loop (the
tools array in RunAgentInput as client-executed actions)
- Shared state (
STATE_SNAPSHOT, STATE_DELTA)
- Token-level streaming of
TEXT_MESSAGE_CONTENT (requires provider stream threading — see §3)
- WebSocket transport (SSE only)
- Any change to
forge-core
Summary
Add an AG-UI protocol surface to Forge agents: an inbound HTTP endpoint that accepts an AG-UI
RunAgentInputand streams the agent run back as AG-UI events over Server-Sent Events. This lets any AG-UI-aware frontend (CopilotKit, the AG-UI Dojo, custom React UIs) drive a Forge agent with no bespoke wiring.AG-UI is a protocol surface, not agent behavior. It is the sibling of the existing A2A server — an HTTP handler on the same mux — not a skill (no
SKILL.md) and not a channel adapter (channels are outbound-only; AG-UI is inbound).In scope (v1: streaming chat)
RUN_STARTED,RUN_FINISHED,RUN_ERRORTEXT_MESSAGE_START,TEXT_MESSAGE_CONTENT,TEXT_MESSAGE_END(whole-turn content — see limitation in §3)TOOL_CALL_START,TOOL_CALL_ARGS,TOOL_CALL_END,TOOL_CALL_RESULT— i.e. the agent's own (backend-executed) tool calls, surfaced to the UI for visibilityOut of scope (explicitly do not implement in this round)
toolsarray inRunAgentInputas client-executed actions)STATE_SNAPSHOT,STATE_DELTA)TEXT_MESSAGE_CONTENT(requires provider stream threading — see §3)forge-core