This is a starter template for building AI agents using PydanticAI and CopilotKit. It provides a modern Next.js application with an integrated AI assistant that helps you manage a todo board with three columns: Todo, In-Progress, and Done.
- OpenAI API Key (for the PydanticAI agent)
- Python 3.12+
- uv
- Node.js 20+
- Any of the following package managers:
- pnpm (recommended)
- npm
- yarn
- bun
Note: This repository ignores lock files (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to avoid conflicts between different package managers. Each developer should generate their own lock file using their preferred package manager. After that, make sure to delete it from the .gitignore.
- Install dependencies using your preferred package manager:
# Using pnpm (recommended)
pnpm install
# Using npm
npm install
# Using yarn
yarn install
# Using bun
bun install
Note: This will automatically setup the Python environment as well.
If you have manual isseus, you can run:
npm run install:agent
- Set up your API keys:
Create a .env
file inside the agent
folder with the following content:
# Required: Get from https://platform.openai.com/api-keys
OPENAI_API_KEY=sk-...your-openai-key-here...
# Optional: For agent observability
# Sign up at https://logfire.pydantic.dev
# Create token: https://logfire.pydantic.dev/docs/how-to-guides/create-write-tokens/
LOGFIRE_TOKEN=...your-logfire-token...
- Start the development server:
# Using pnpm
pnpm dev
# Using npm
npm run dev
# Using yarn
yarn dev
# Using bun
bun run dev
This will start both the UI and agent servers concurrently.
This app connects three technologies to create a full-stack agentic todo application:
-
PydanticAI (
agent/src/agent.py
) - Python AI agent framework- Defines the agent with GPT-4.1-mini model and tools
- Tools (
agent/src/tools.py
):add_todos
,update_todo
,delete_todos
, etc. - Uses Pydantic models (
agent/src/models.py
) for type-safe state
-
AG-UI (
agent/src/main.py
) - Bridge between Python and webagent.to_ag_ui()
converts PydanticAI agent to FastAPI server (port 8000)- Handles state synchronization via
StateSnapshotEvent
-
CopilotKit (
src/app/page.tsx
,src/app/api/copilotkit/route.ts
) - React chat UIuseCoAgent()
creates bidirectional state sync with backendHttpAgent
connects to Python AG-UI server- Renders tool calls with custom UI components
🔍 Technical Deep Dive ->
graph TD
A[User Input] --> B[CopilotKit UI<br/>src/app/page.tsx]
B --> C[useCoAgent Hook<br/>State Sync]
C --> D[Next.js API Route<br/>src/app/api/copilotkit/route.ts]
D --> E[HttpAgent<br/>:8000 proxy]
E --> F[AG-UI Server<br/>agent/src/main.py]
F --> G[PydanticAI Agent<br/>agent/src/agent.py]
G --> H[Tools<br/>agent/src/tools.py]
H --> I[StateSnapshotEvent]
I --> F
F --> E
E --> D
D --> C
C --> B
B --> J[UI Update]
style A fill:#e1f5ff
style J fill:#e1f5ff
style B fill:#a8daff
style C fill:#a8daff
style D fill:#a8daff
style F fill:#ffcba8
style G fill:#ffcba8
style H fill:#ffcba8
style I fill:#ffd700
- User types in chat → CopilotKit sends to
/api/copilotkit
- Next.js proxies via
HttpAgent
to Python backend (localhost:8000) - PydanticAI agent calls tools (e.g.,
add_todos
) - Tools return
StateSnapshotEvent
with updated state - AG-UI pushes state back through CopilotKit
useCoAgent
updates React UI automatically
src/app/page.tsx
- CopilotKit integration & state syncsrc/app/api/copilotkit/route.ts
- Proxy to Python backendagent/src/agent.py
- PydanticAI agent definitionagent/src/tools.py
- Todo management toolsagent/src/models.py
- Shared data modelsagent/src/main.py
- AG-UI server setup
- PydanticAI Documentation - Learn more about PydanticAI and its features
- CopilotKit Documentation - Explore CopilotKit's capabilities
- Next.js Documentation - Learn about Next.js features and API
The following scripts can also be run using your preferred package manager:
dev
- Starts both UI and agent servers in development modedev:debug
- Starts development servers with debug logging enableddev:ui
- Starts only the Next.js UI serverdev:agent
- Starts only the PydanticAI agent serverbuild
- Builds the Next.js application for productionstart
- Starts the production serverlint
- Runs ESLint for code lintinginstall:agent
- Installs Python dependencies for the agent
Feel free to submit issues and enhancement requests! This starter is designed to be easily extensible.
This project is licensed under the MIT License - see the LICENSE file for details.
If you see "I'm having trouble connecting to my tools", make sure:
- The PydanticAI agent is running on port 8000
- Your OpenAI API key is set correctly
- Both servers started successfully
If you encounter Python import errors:
cd agent
uv sync
uv run src/main.py