## Summary Closes the LGT-vs-LGP delta from PR #4879. Fixes 16 of 17 LGT-only test failures, extracts inlined components to match LGP's factored pattern, removes orphan demos, and ports infrastructure. ## Changes ### Test fixes (16 of 17 LGT-only failures) - **headless-complete**: `normalizeResponse()` for additional_kwargs.tool_calls + missing `get_revenue_chart` tool - **readonly-state**: Removed aimock `systemMessage: "Atai"` gate (gpt-5.4 sends role:developer) - **reasoning-custom**: Created missing demo page + wired route to existing reasoning graph - **reasoning-default**: Renamed from `reasoning-default-render` + added `suggestions.ts` - **declarative-gen-ui**: Fixed A2UI tool name (`render_a2ui` → `_design_a2ui_surface`) + state-aware ToolNode wrapper - **beautiful-chat**: A2UI v0.9 operation format + ExampleCanvas agentId + manage_todos Command + copilotkitEmitState ### Component extraction (inlining → LGP pattern) - **hitl**: 7 inlined components extracted to separate files (step-selector, steps-feedback, suggestions, 4 shadcn components) - **declarative-hashbrown**: All files aligned to LGP - **declarative-json-render**: All files aligned to LGP - **shared-state-read**: Extracted recipe-card.tsx + types.ts from 460-line page.tsx - **reasoning-default**: Extracted suggestions.ts - **beautiful-chat**: Extracted home-page.tsx ### Cleanup - Removed `agentic-chat-reasoning` (deprecated, untested, covered by reasoning-custom) - Removed `shared-state-write` (unimplemented stub, superseded by shared-state-read-write) - Ported `layout.tsx` from LGP (per-demo title metadata) ## Variance after this PR - Frontend files: 240 identical (96%), 10 justified diffs, 0 functional gaps - Tests: 37 identical (100%) - API routes: 15 identical (100%) ## 1 remaining LGT-only failure - reasoning-default "Show reasoning pill" — fixture doesn't produce reasoning tokens for LGT pipeline ## Test plan - [ ] Full LGP suite on production-parity local cluster - [ ] Full LGT suite on production-parity local cluster - [ ] CI checks
CopilotKit
Build agent-native applications with generative UI, shared state, and human-in-the-loop workflows.
What is CopilotKit
CopilotKit is a best-in-class SDK for building full-stack agentic applications, Generative UI, and chat applications.
We are the company behind the AG-UI Protocol - adopted by Google, LangChain, AWS, Microsoft, Mastra, PydanticAI, and more!
https://github.com/user-attachments/assets/72b7b4f3-b6e7-460c-a932-5746fe3c8db3
Features:
- Chat UI – A React-based chat interface that supports message streaming, tool calls, and agent responses.
- Backend Tool Rendering – Enables agents to call backend tools that return UI components rendered directly in the client.
- Generative UI – Allows agents to generate and update UI components dynamically at runtime based on user intent and agent state.
- Shared State – A synchronized state layer that both agents and UI components can read from and write to in real time.
- Human-in-the-Loop – Lets agents pause execution to request user input, confirmation, or edits before continuing.
https://github.com/user-attachments/assets/55bf6714-62a7-4d5d-9232-07747cc0763b
Quick Start
New projects:
npx copilotkit@latest create -f <framework>
Existing projects:
npx copilotkit@latest init
https://github.com/user-attachments/assets/7372b27b-8def-40fb-a11d-1f6585f556ad
What this gives you:
- CopilotKit installed – Core packages are fully set up in your app
- Provider configured – Context, state, and hooks ready to use
- Agent <> UI connected – Agents can stream actions and render UI immediately
- Deployment-ready – Your app is ready to deploy
Complete getting started guide →
How it works:
CopilotKit connects your UI, agents, and tools into a single interaction loop.
This enables:
- Agents that ask users for input
- Tools that render UI
- Stateful workflows across steps and sessions
⭐️ useAgent Hook
The useAgent hook is a proper superset of useCoAgent and sits directly on AG-UI, giving more control over the agent connection.
// Programmatically access and control your agents
const { agent } = useAgent({ agentId: "my_agent" });
// Render and update your agent's state
return <div>
<h1>{agent.state.city}</h1>
<button onClick={() => agent.setState({ city: "NYC" })}>
Set City
</button>
</div>
Check out the useAgent docs to learn more.
https://github.com/user-attachments/assets/67928406-8abc-49a1-a851-98018b52174f
Generative UI
Generative UI is a core CopilotKit pattern that allows agents to dynamically render UI as part of their workflow.
https://github.com/user-attachments/assets/3cfacac0-4ffd-457a-96f9-d7951e4ab7b6
Compare the Three Types
Explore:
Generative UI educational repo →
🖥️ AG-UI: The Agent–User Interaction Protocol
Connect agent workflow to user-facing apps, with deep partnerships and 1st-party integrations across the agentic stack—including LangGraph, CrewAI, and more.
npx create-ag-ui-app my-agent-app
🤝 Community
Have questions or need help?
Join our Discord →Read the Docs →
Try Copilot Cloud →
Stay up to date with our latest releases!
Follow us on LinkedIn →Follow us on X →
🙋🏽♂️ Contributing
Thanks for your interest in contributing to CopilotKit! 💜
We value all contributions, whether it's through code, documentation, creating demo apps, or just spreading the word.
Here are a few useful resources to help you get started:
-
For code contributions, CONTRIBUTING.md.
-
For documentation-related contributions, check out the documentation contributions guide.
-
Want to contribute but not sure how? Join our Discord and we'll help you out!
📄 License
This repository's source code is available under the MIT License.