Replace eslint and prettier with oxlint and oxfmt for faster linting and formatting across the monorepo. Remove all eslint and prettier configs, dependencies, and related packages. Add .oxlintrc.json and .oxfmtrc.json for the new tooling. Update CI workflows and lefthook hooks accordingly. Reformat codebase with oxfmt. https://claude.ai/code/session_01GMkSf29p78HuMR1mbXn8He
State Machine Copilot
Transform complex conversational flows into manageable state machines. This AI-powered car sales application demonstrates how to build sophisticated multi-stage interactions with contextual awareness and state transitions.
Click here for a running example
🚗 Overview
This application simulates a car dealership experience where an AI assistant guides users through a multi-stage process:
- Contact Information - Collecting customer details
- Car Selection - Helping users build their dream car
- Financing Options - Offering payment alternatives
- Payment Processing - Handling financing or direct payment
- Order Confirmation - Finalizing the purchase
The example showcases how to implement complex conversational flows using a state machine pattern with CopilotKit.
🛠️ Getting Started
Prerequisites
- Node.js 18+
- npm, yarn, or pnpm
Installation
-
Clone the repository:
git clone https://github.com/CopilotKit/CopilotKit.git cd CopilotKit/examples/copilot-state-machine -
Install dependencies:
pnpm installUsing other package managers
# Using yarn yarn install # Using npm npm install -
Create a
.envfile in the project root and add your Copilot Cloud Public API Key:NEXT_PUBLIC_CPK_PUBLIC_API_KEY=your_api_key_here -
Start the development server:
pnpm devUsing other package managers
# Using yarn yarn dev # Using npm npm run dev -
Open http://localhost:3000 in your browser to see the application.
🧩 How It Works
This demo uses several key CopilotKit features to implement a state machine pattern:
State Machine Architecture
The application is structured around 6 distinct stages, each with its own hook in the stages directory:
- getContactInfo - Collecting customer information
- buildCar - Configuring car options
- sellFinancing - Presenting financing options
- getFinancingInfo - Collecting financing details
- getPaymentInfo - Processing payment information
- confirmOrder - Finalizing the order
Each stage hook encapsulates stage-specific CopilotKit configuration and prompts.
Global State Management
The use-global-state.tsx hook manages the application's global state, while the car-sales-chat.tsx component ties all stages together.
State Visualization
A React Flow powered visualizer (state-visualizer.tsx) displays the current state and possible transitions, updating in real-time as the conversation progresses.
CopilotKit Integration
Each stage uses CopilotKit's hooks to provide context-aware AI assistance:
// Example from use-stage-build-car.tsx
useCopilotAction({
name: "updateCarConfiguration",
description: "Update the car configuration based on user preferences",
parameters: [
{
name: "model",
type: "string",
required: true,
description: "The car model selected by the user",
},
// Other parameters...
],
handler: async (action) => {
// Update state with the new configuration
},
});
📚 Learn More
Ready to build your own AI-powered state machine? Check out these resources:
- CopilotKit Documentation - Comprehensive guides and API references
- CopilotKit Cloud - Deploy your copilots with our managed cloud solution
- React Flow Documentation - Learn more about building interactive node-based UIs
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
