mcpField
C
copilotkit-agui

copilotkit-agui

github.com/copilotkitDevelopment38.3k2.8k installsUpdated today
Repository

About copilotkit-agui

copilotkit-agui is a skill for developers implementing or troubleshooting the AG-UI event protocol between agents and frontends. It covers typed event flows, state synchronization, streaming, and human-in-the-loop interactions.

Key features

  1. 01Explains AG-UI event families
  2. 02Guides backend event streaming
  3. 03Covers state snapshots and JSON Patch
  4. 04Documents interrupt and resume flows
  5. 05Troubleshoots SSE and encoding

Use cases

  1. 01Building an AG-UI-compatible agent backend
  2. 02Adding a framework integration with AbstractAgent
  3. 03Diagnosing missing or malformed frontend events
  4. 04Implementing synchronized state or human review

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/copilotkit/copilotkit --skill copilotkit-agui

After installing, type/copilotkit-aguiin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

sources.md
references/
building-agents.md
client-sdk.md
event-flow-diagrams.md
protocol-spec.md

Details

From the project README

AG-UI Protocol Skill

Overview

AG-UI (Agent-User Interaction) is CopilotKit's open event-based protocol for agent-to-UI communication. All agent-frontend interaction flows through typed events streamed over SSE (Server-Sent Events) or binary protobuf transport. Agents implement AbstractAgent.run() returning an RxJS Observable<BaseEvent>, and the client SDK handles event application, state management, and message history.

When to Use

  • Building a custom agent backend that needs to speak AG-UI
  • Implementing AbstractAgent.run() for a new framework integration
  • Debugging why events aren't reaching the frontend or arriving malformed
  • Understanding event ordering (lifecycle, text, tool calls, state)
  • Working with state synchronization (snapshots vs JSON Patch deltas)
  • Implementing human-in-the-loop interrupt/resume flows
  • Troubleshooting SSE streaming or encoding issues

When NOT to Use

  • For CopilotKit React hooks and frontend components, use copilotkit-develop
  • For CopilotKit runtime setup and configuration, use copilotkit-setup
  • For framework-specific integration guides (LangGraph, Mastra, CrewAI), use copilotkit-integrations

Quick Reference

Event Families
FamilyEventsPurpose
LifecycleRUN_STARTED, RUN_FINISHED, RUN_ERROR, STEP_STARTED, STEP_FINISHEDRun boundaries and progress
TextTEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT, TEXT_MESSAGE_ENDStreaming text messages
Tool CallsTOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END, TOOL_CALL_RESULTAgent tool invocations
StateSTATE_SNAPSHOT, STATE_DELTA, MESSAGES_SNAPSHOTState synchronization
ReasoningREASONING_START, REASONING_MESSAGE_START/CONTENT/END, REASONING_END, REASONING_ENCRYPTED_VALUEChain-of-thought visibility
ActivityACTIVITY_SNAPSHOT, ACTIVITY_DELTAStructured progress updates
CustomRAW, CUSTOMExtension points
Convenience Chunk Events

TEXT_MESSAGE_CHUNK and TOOL_CALL_CHUNK auto-expand into Start/Content/End triads via the client's transformChunks pipeline. Use these for simpler backend implementations.

SSE Wire Format

Each event is a JSON object sent as an SSE data line:

data: {"type":"RUN_STARTED","threadId":"t1","runId":"r1"}\n\n
data: {"type":"TEXT_MESSAGE_START","messageId":"m1","role":"assistant"}\n\n
data: {"type":"TEXT_MESSAGE_CONTENT","messageId":"m1","delta":"Hello"}\n\n
data: {"type":"TEXT_MESSAGE_END","messageId":"m1"}\n\n
data: {"type":"RUN_FINISHED","threadId":"t1","runId":"r1"}\n\n
Packages
PackagenpmPurpose
@ag-ui/coreEvents, types, schemasProtocol definition
@ag-ui/clientAbstractAgent, HttpAgent, middleware, event applicationClient SDK
@ag-ui/encoderEventEncoder (SSE + protobuf)Server-side encoding

Workflow: Building an AG-UI Backend

  1. Define your endpoint -- Accept POST with RunAgentInput body, respond with text/event-stream
  2. Parse input -- Extract threadId, runId, messages, tools, state, context from the request body
  3. Emit events in order -- RUN_STARTED first, then content events, then RUN_FINISHED or RUN_ERROR
  4. Encode as SSE -- Use @ag-ui/encoder's EventEncoder.encode() or manually write data: JSON\n\n
  5. Handle tool results -- Client sends TOOL_CALL_RESULT back; agent processes and continues

See references/building-agents.md for a complete working example.

Key Protocol Rules

  • Every run MUST start with RUN_STARTED and end with RUN_FINISHED or RUN_ERROR
  • TEXT_MESSAGE_CONTENT.delta must be non-empty
  • Tool call events are linked by toolCallId
  • STATE_DELTA uses RFC 6902 JSON Patch operations
  • Multiple sequential runs are supported -- each must complete before the next starts
  • Messages accumulate across runs; state continues unless reset by STATE_SNAPSHOT

References

  • references/protocol-spec.md -- Complete event type reference with schemas and examples
  • references/building-agents.md -- Step-by-step guide to building AG-UI backends
  • references/event-flow-diagrams.md -- ASCII sequence diagrams for common flows
  • references/client-sdk.md -- @ag-ui/client API reference

Comments

Markdown supported