diff --git a/agent/poetry.lock b/agent/poetry.lock
index f472ea7..6cc5f1c 100644
--- a/agent/poetry.lock
+++ b/agent/poetry.lock
@@ -2,36 +2,35 @@
 
 [[package]]
 name = "ag-ui-langgraph"
-version = "0.0.1"
-description = ""
+version = "0.0.18a0"
+description = "Implementation of the AG-UI protocol for LangGraph."
 optional = false
 python-versions = "<3.14,>=3.10"
 groups = ["main"]
 files = [
-    {file = "ag_ui_langgraph-0.0.1-py3-none-any.whl", hash = "sha256:b7c90b90fb8d736fc7426219166fa63572bcc10171253d5c982544fa256b568f"},
-    {file = "ag_ui_langgraph-0.0.1.tar.gz", hash = "sha256:3208916af56f5c2dd395c85889d089f12c84207bc3e0ae12acc045abe845ce09"},
+    {file = "ag_ui_langgraph-0.0.18a0-py3-none-any.whl", hash = "sha256:8bfd26f475adf2cafba4baa4e124a97463203714cd8232970c9f8763b0cc2e30"},
+    {file = "ag_ui_langgraph-0.0.18a0.tar.gz", hash = "sha256:a9951ed205016be1a44c4ea73d6117b3d5daa3d9bb69184987847beea62907a9"},
 ]
 
 [package.dependencies]
-ag-ui-protocol = "0.1.7"
-fastapi = {version = ">=0.115.12,<0.116.0", optional = true, markers = "extra == \"fastapi\""}
+ag-ui-protocol = "0.2.0a0"
 langchain = ">=0.3.0"
 langchain-core = ">=0.3.0"
-langgraph = ">=0.3.25,<=0.5.0"
+langgraph = ">=0.3.25,<1.1.0"
 
 [package.extras]
 fastapi = ["fastapi (>=0.115.12,<0.116.0)"]
 
 [[package]]
 name = "ag-ui-protocol"
-version = "0.1.7"
+version = "0.2.0a0"
 description = ""
 optional = false
 python-versions = "<4.0,>=3.9"
 groups = ["main"]
 files = [
-    {file = "ag_ui_protocol-0.1.7-py3-none-any.whl", hash = "sha256:8c821662ca6e9852569022f449b9f7aeb3f16aa75390fa8c28ceae2cce642baa"},
-    {file = "ag_ui_protocol-0.1.7.tar.gz", hash = "sha256:0e93fd9f7c74d52afbd824d6e9738bd3422e859503905ba7582481cbc3c67ab2"},
+    {file = "ag_ui_protocol-0.2.0a0-py3-none-any.whl", hash = "sha256:3f1fbf7ea1f0333ce8034cdc67df192b3c1a85a6c39dc866c35f9329df85b9cf"},
+    {file = "ag_ui_protocol-0.2.0a0.tar.gz", hash = "sha256:422bc284f9ab7019d2796641bac96faddd20eba815e1bad6122d72be1f989b80"},
 ]
 
 [package.dependencies]
@@ -308,29 +307,6 @@ files = [
     {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
 ]
 
-[[package]]
-name = "copilotkit"
-version = "0.1.55"
-description = "CopilotKit python SDK"
-optional = false
-python-versions = "<3.13,>=3.10"
-groups = ["main"]
-files = [
-    {file = "copilotkit-0.1.55-py3-none-any.whl", hash = "sha256:aa4a5026190760d6ba1dbd920849d62c3500a9c6d583adf4c02950aed75ffbf7"},
-    {file = "copilotkit-0.1.55.tar.gz", hash = "sha256:d095be62c58f5cc25ab9e34839ec16ef64e45a88378e5dbf4770efcb8e10ac43"},
-]
-
-[package.dependencies]
-ag-ui-langgraph = {version = "0.0.1", extras = ["fastapi"]}
-fastapi = ">=0.115.0,<0.116.0"
-langchain = ">=0.3.4,<=0.3.26"
-langgraph = ">=0.3.18,<=0.5.0"
-partialjson = ">=0.0.8,<0.0.9"
-toml = ">=0.10.2,<0.11.0"
-
-[package.extras]
-crewai = ["crewai (==0.118.0)"]
-
 [[package]]
 name = "distro"
 version = "1.9.0"
@@ -1024,18 +1000,6 @@ files = [
     {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
 ]
 
-[[package]]
-name = "partialjson"
-version = "0.0.8"
-description = "Parse incomplete or partial json"
-optional = false
-python-versions = "*"
-groups = ["main"]
-files = [
-    {file = "partialjson-0.0.8-py3-none-any.whl", hash = "sha256:22c6c60944137f931a7033fa0eeee2d74b49114f3d45c25a560b07a6ebf22b76"},
-    {file = "partialjson-0.0.8.tar.gz", hash = "sha256:91217e19a15049332df534477f56420065ad1729cedee7d8c7433e1d2acc7dca"},
-]
-
 [[package]]
 name = "pycparser"
 version = "2.22"
@@ -1592,18 +1556,6 @@ requests = ">=2.26.0"
 [package.extras]
 blobfile = ["blobfile (>=2)"]
 
-[[package]]
-name = "toml"
-version = "0.10.2"
-description = "Python Library for Tom's Obvious, Minimal Language"
-optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
-groups = ["main"]
-files = [
-    {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
-    {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
-]
-
 [[package]]
 name = "tqdm"
 version = "4.67.1"
@@ -1940,4 +1892,4 @@ cffi = ["cffi (>=1.11)"]
 [metadata]
 lock-version = "2.1"
 python-versions = ">=3.10,<3.13"
-content-hash = "3d6e016ef0a5b22010a8e175f17129a4fbe7d0287539ca58d786ad9497593769"
+content-hash = "6a108e2de50bd6623b9a24193c405e9583df1cda6aeae123035547d68ed00a94"
diff --git a/agent/pyproject.toml b/agent/pyproject.toml
index 42c2012..3bfb56f 100644
--- a/agent/pyproject.toml
+++ b/agent/pyproject.toml
@@ -9,7 +9,7 @@ package-mode = false
 
 [tool.poetry.dependencies]
 python = ">=3.10,<3.13"
-copilotkit = "0.1.55"
+ag-ui-langgraph = "0.0.18a0"
 langchain = "0.3.26"
 langchain-openai = "0.3.28"
 langgraph = "0.4.10"
diff --git a/agent/sample_agent/demo.py b/agent/sample_agent/demo.py
index 983facd..e44da69 100644
--- a/agent/sample_agent/demo.py
+++ b/agent/sample_agent/demo.py
@@ -5,26 +5,27 @@
 
 import os
 from dotenv import load_dotenv
-load_dotenv() # pylint: disable=wrong-import-position
 
 from fastapi import FastAPI
 import uvicorn
-from copilotkit import LangGraphAGUIAgent
 from sample_agent.agent import graph
-from ag_ui_langgraph import add_langgraph_fastapi_endpoint
+from ag_ui_langgraph import add_langgraph_fastapi_endpoint, LangGraphAgent
+
+_ = load_dotenv()  # pylint: disable=wrong-import-position
 
 app = FastAPI()
 
 add_langgraph_fastapi_endpoint(
     app=app,
-    agent=LangGraphAGUIAgent(
+    agent=LangGraphAgent(
         name="sample_agent",
         description="An example agent to use as a starting point for your own agent.",
-        graph=graph
+        graph=graph,
     ),
-    path="/"
+    path="/",
 )
 
+
 def main():
     """Run the uvicorn server."""
     port = int(os.getenv("PORT", "8123"))
diff --git a/package.json b/package.json
index 44de254..923ad69 100644
--- a/package.json
+++ b/package.json
@@ -13,11 +13,12 @@
     "install:agent": "cd agent && poetry install"
   },
   "dependencies": {
-    "@ag-ui/langgraph": "0.0.6",
-    "@ai-sdk/openai": "^1.3.22",
-    "@copilotkit/react-core": "1.9.2",
-    "@copilotkit/react-ui": "1.9.2",
-    "@copilotkit/runtime": "1.9.2",
+    "@ag-ui/core": "0.0.40-alpha.7",
+    "@ag-ui/langgraph": "0.0.19-alpha.1",
+    "@copilotkitnext/core": "0.0.19-threads-and-attachements.1",
+    "@copilotkitnext/react": "0.0.19-threads-and-attachements.1",
+    "@copilotkitnext/runtime": "0.0.19-threads-and-attachements.1",
+    "hono": "^4.10.1",
     "next": "15.3.2",
     "react": "^19.0.0",
     "react-dom": "^19.0.0",
diff --git a/src/app/api/copilotkit/[...slug]/route.ts b/src/app/api/copilotkit/[...slug]/route.ts
new file mode 100644
index 0000000..d3522d6
--- /dev/null
+++ b/src/app/api/copilotkit/[...slug]/route.ts
@@ -0,0 +1,26 @@
+import { LangGraphHttpAgent } from "@ag-ui/langgraph";
+import {
+  CopilotRuntime,
+  createCopilotEndpoint,
+  AgentRunner,
+} from "@copilotkitnext/runtime";
+import { handle } from "hono/vercel";
+
+const runtime = new CopilotRuntime({
+  agents: {
+    default: new LangGraphHttpAgent({
+      url: process.env.AGENT_URL || "http://localhost:8123",
+    }),
+    foo: new LangGraphHttpAgent({
+      url: process.env.AGENT_URL || "http://localhost:8123",
+    }),
+  },
+});
+
+const app = createCopilotEndpoint({
+  runtime,
+  basePath: "/api/copilotkit",
+});
+
+export const GET = handle(app);
+export const POST = handle(app);
diff --git a/src/app/api/copilotkit/route.ts b/src/app/api/copilotkit/route.ts
deleted file mode 100644
index 6bf15f7..0000000
--- a/src/app/api/copilotkit/route.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import {
-  CopilotRuntime,
-  ExperimentalEmptyAdapter,
-  copilotRuntimeNextJSAppRouterEndpoint,
-} from "@copilotkit/runtime";
-
-import { LangGraphHttpAgent } from "@ag-ui/langgraph"
-import { NextRequest } from "next/server";
- 
-// 1. You can use any service adapter here for multi-agent support. We use
-//    the empty adapter since we're only using one agent.
-const serviceAdapter = new ExperimentalEmptyAdapter();
- 
-// 2. Create the CopilotRuntime instance and utilize the LangGraph AG-UI
-//    integration to setup the connection.
-const runtime = new CopilotRuntime({
-  agents: {
-    "sample_agent": new LangGraphHttpAgent({
-      url: process.env.AGENT_URL || "http://localhost:8123",
-    }),
-  }
-});
- 
-// 3. Build a Next.js API route that handles the CopilotKit runtime requests.
-export const POST = async (req: NextRequest) => {
-  const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({
-    runtime, 
-    serviceAdapter,
-    endpoint: "/api/copilotkit",
-  });
- 
-  return handleRequest(req);
-};
\ No newline at end of file
diff --git a/src/app/components/gen-ui/weather.tsx b/src/app/components/gen-ui/weather.tsx
new file mode 100644
index 0000000..2589a42
--- /dev/null
+++ b/src/app/components/gen-ui/weather.tsx
@@ -0,0 +1,84 @@
+"use client";
+
+// Weather card component where the location and themeColor are based on what the agent
+// sets via tool calls.
+
+import { defineToolCallRenderer } from "@copilotkitnext/react";
+
+// @ts-ignore
+export const weatherToolRenderer = defineToolCallRenderer({
+  name: "get_weather",
+  render: ({ args }) => {
+    const { location } = args;
+    const themeColor = "blue";
+    return 
Current Weather
+Humidity
+45%
+Wind
+5 mph
+Feels Like
+72°
+This is a demonstrative page, but it could be anything you want! 🪁
-{proverb}
- -- No proverbs yet. Ask the assistant to add some! -
} -Current Weather
-Humidity
-45%
-Wind
-5 mph
-Feels Like
-72°
-