copilotkit-agui
Use when building custom agent backends, implementing the AG-UI protocol, debugging streaming issues, or understanding how agents communicate with frontends. Covers event types, SSE transport, AbstractAgent/HttpAgent patterns, state synchronization, tool calls, and human-in-the-loop flows.
Works with
---
name: copilotkit-agui
description: Use when building custom agent backends, implementing the AG-UI protocol, debugging streaming issues, or understanding how agents communicate with frontends. Covers event types, SSE transport, AbstractAgent/HttpAgent patterns, state synchronization, tool calls, and human-in-the-loop flows.
license: MIT
---
# 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
| Family | Events | Purpose |
| ---------- | ------------------------------------------------------------------------------------------------------ | --------------------------- |
| Lifecycle | `RUN_STARTED`, `RUN_FINISHED`, `RUN_ERROR`, `STEP_STARTED`, `STEP_FINISHED` | Run boundaries and progress |
| Text | `TEXT_MESSAGE_START`, `TEXT_MESSAGE_CONTENT`, `TEXT_MESSAGE_END` | Streaming text messages |
| Tool Calls | `TOOL_CALL_START`, `TOOL_CALL_ARGS`, `TOOL_CALL_END`, `TOOL_CALL_RESULT` | Agent tool invocations |
| State | `STATE_SNAPSHOT`, `STATE_DELTA`, `MESSAGES_SNAPSHOT` | State synchronization |
| Reasoning | `REASONING_START`, `REASONING_MESSAGE_START/CONTENT/END`, `REASONING_END`, `REASONING_ENCRYPTED_VALUE` | Chain-of-thought visibility |
| Activity | `ACTIVITY_SNAPSHOT`, `ACTIVITY_DELTA` | Structured progress updates |
| Custom | `RAW`, `CUSTOM` | Extension 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
| Package | npm | Purpose |
| ---------------- | ------------------------------------------------------- | -------------------- |
| `@ag-ui/core` | Events, types, schemas | Protocol definition |
| `@ag-ui/client` | AbstractAgent, HttpAgent, middleware, event application | Client SDK |
| `@ag-ui/encoder` | EventEncoder (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 referenceMore Debugging skills
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.
explore-code
lllllllama/rigorpilot-skills
Rigor Improve implementation leaf skill for auditable candidate implementation in deep learning research repositories. Use when the researcher explicitly authorizes exploratory work on an isolated branch or worktree to transplant modules, adapt a backbone, add LoRA or adapter layers, replace a head, or stitch together meaningful low-risk migration ideas with rollback-aware records in `explore_outputs/`. Do not use for end-to-end exploration orchestration on top of `current_research`, trusted baseline reproduction, conservative debugging, environment setup, verified contribution claims, or default repository analysis.
safe-debug
lllllllama/rigorpilot-skills
Rigor Debug / Rigor Audit skill for deep learning research work. Use when the user pastes a traceback, terminal error, CUDA OOM, checkpoint load failure, shape mismatch, NaN loss symptom, or training failure and wants conservative diagnosis before any patching, with debug fixes clearly separated from research contributions. Do not use for broad refactoring, speculative adaptation, automatic exploratory patching, or general repository familiarization.

