The marked block that wires managed Intelligence is the region a hosted reader copies verbatim, and nothing checked it. Both gaps were deliberate: the parity manifest lists `src/app/api/copilotkit/**` under `allowedDivergence` for every instance it tracks, and no `docker-compose.test.yml` sets `COPILOTKIT_LICENSE_TOKEN`, so every smoke-tested starter takes the else arm and the `intelligence:` arm has never run in CI. The cost was already visible. The block's code was byte-identical in 21 of 22 starters, but its warning comment had drifted into five variants and the two `ms-agent-framework-*` starters shipped the `demo-user` stub with no warning at all. That drift is how the localhost default of OSS-981 survived in all 22 copies at once. Add `scripts/validate-intelligence-wiring-block.ts`, which greps the opening marker, compares every site against the north-star starter, and fails on the first line that differs. Two normalisations keep it usable: the block is dedented, because `agentcore` nests it deeper, and the else arm's runner name is masked, because `agentcore` runs `AgentCoreRunner` in front of a Bedrock session where an in-process runner has nothing to run. Everything else, comment text included, must match to the byte. Then unify the warning at all 22 sites on the fullest wording, which also says the id must exist in Intelligence or thread operations can fail. The check passes on day one, so it is a ratchet rather than a migration. It is a shape gate, not a content gate: 22 identically wrong copies still pass. What it guarantees is that a fix reaches all of them or none. Not covered: enrolling the `intelligence:` arm in the smoke path. That needs a license token in CI and a reachable endpoint from the compose network, and is tracked separately.
CopilotKit <> Agent Spec Starter
This is a starter template for building AI agents using Agent Spec and CopilotKit. It provides a modern Next.js application wired to a FastAPI backend that serves an Agent Spec agent with A2UI-powered frontend tool rendering (calendar, inbox, email compose, daily brief dashboard).
Prerequisites
- OpenAI-compatible API key (for the Agent Spec LLM)
- Python 3.10+
- uv
- Node.js 20+
- Any of the following package managers:
Getting Started
Before installing, please clone the AG-UI repository into the same directory as this repo, with-agent-spec.
- Install dependencies using your preferred package manager:
# Using npm (default)
npm install
# Using pnpm
pnpm install
# Using yarn
yarn install
# Using bun
bun install
Note: This automatically sets up the Python environment for the agent (via
postinstall). If you encounter issues, you can run:npm run install:agent
Note: this install both LangGraph and WayFlow runtimes for running your Agent Spec agents. The runtime can be selected when loading the agent in main.py, setting either langgraph or wayflow.
- (Optional) Set up your LLM environment variables:
Create a .env file inside the agent folder if you need to override defaults:
OPENAI_API_KEY=sk-...your-api-key...
OPENAI_BASE_URL=https://api.your-provider.com/v1 # optional
OPENAI_MODEL=gpt-5.2 # optional
The backend loads this .env automatically (via python-dotenv). You can also set:
PORTto change the FastAPI server port (defaults to8000in this template)- Any provider-specific variables your tools require
- Start the development servers:
# Using npm (default)
npm run dev
# Using pnpm
pnpm dev
# Using yarn
yarn dev
# Using bun
bun run dev
This starts both the UI and the agent concurrently. The agent runs at http://localhost:8000/, and the UI runs at http://localhost:3000. The UI proxies requests to the agent (no extra env required by default).
To run only the UI or only the backend:
# Only UI
npm run dev:ui
# Only backend
npm run dev:agent
Project Structure
src/app/page.tsx- Main chat UI with frontend tool renderers (calendar, inbox, email, daily brief)src/components/- React components for CalendarView, InboxView, EmailComposeViewsrc/app/theme.ts- A2UI theme configurationagent/src/a2ui_agentspec_agent.py- Agent spec definition with system prompt, tools, and demo dataagent/src/main.py- FastAPI server entry point
Available Scripts
You can run these with any 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 Agent Spec FastAPI serverbuild- Builds the Next.js application for productionstart- Starts the production serverinstall:agent- Installs Python dependencies for the agent
Documentation
- CopilotKit Documentation: https://docs.copilotkit.ai
- Next.js Documentation: https://nextjs.org/docs
Contributing
Feel free to submit issues and enhancement requests! This starter is designed to be easily extensible.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Troubleshooting
A2UI surfaces clipped (temporary workaround)
If A2UI cards (e.g. those with bottom action buttons) get clipped in the chat UI, we keep a temporary patch under:
src/app/patches/@copilotkit/a2ui-renderer/dist/A2UIMessageRenderer.js
To apply it locally (this edits node_modules and will be overwritten by reinstalling dependencies):
npm run patch:ui
After copying, restart npm run dev.
Custom message key warning (temporary workaround)
If you see React warnings about duplicate keys related to custom message rendering (keys like ${message.id}-custom-before / ${message.id}-custom-after), we keep a temporary patch under:
src/app/patches/@copilotkit/react-core/dist/index.mjs
To apply it locally (this edits node_modules and will be overwritten by reinstalling dependencies):
npm run patch:ui
After copying, restart npm run dev.
Agent Connection Issues
If you see "I'm having trouble connecting to my tools", make sure:
- The Agent Spec backend is running on port 8000
- The UI started successfully on port 3000
- If using a custom backend URL, set
NEXT_PUBLIC_COPILOTKIT_SERVER_URL
Python Dependencies
If you encounter Python import errors:
cd agent
uv sync
uv run src/main.py
