Hardy faced a 26.5% rent raise after only 6 months of moving into a rental in the Bay Area 😔. This jarring experience revealed a fundamental problem with civic engagement: citizens lack the tools to navigate the dense, one-sided documents, leaving people unable to grasp inherent trade-offs, understand opposing viewpoints, or form well-rounded opinions. This prevents effective advocacy for their interests.
What it does
CivicAI is a sophisticated multi-agent AI system that transforms policy documents into dynamic, NotebookLM-style debates between stakeholders.
How we built it
CivicAI employs a sophisticated multi-agent architecture:
Backend (Python + FastAPI):
- CrewAI Framework: Orchestrates multi-agent workflows with dynamic agent instantiation
- LLM Integration: Claude (Anthropic) for diverse reasoning capabilities
- Policy Discovery: Exa API/Python SDK for semantic search across government sources
- Real-time Communication: WebSocket streaming for live debate experiences
- Experiment Tracking: Weights & Biases Weave for ML monitoring and transparency
Frontend (React + TypeScript):
- Modern UI: React 18 with Tailwind CSS and Shadcn/UI components
- Real-time Updates: WebSocket integration for live debate streaming
- Responsive Design: Optimized for desktop and mobile policy analysis
- Data Visualization: Recharts for policy impact charts and stakeholder analysis
Sponsor tools
- Exa: Created a state and local policy search system using Exa API's semantic search capabilities.
- Google A2A: Policy discovery agents, debate moderator agent, and debate participant agents such as - renter and landlord all communicate using A2A.
- Weights and Biases: Weave for ML monitoring/traces as well as backup inference
- CrewAI: Agent orchestration done using CrewAI and Claude. Orchestrates debate simulation and AI deliberation of policies by spinning up n number of participating agents and performs agents meta-programming to provide stakeholder personas to them.
Challenges we ran into
🤖 Multi-Agent Coordination
Challenge: Ensuring authentic stakeholder representation without harmful stereotypes while maintaining coherent debates between 2-4 agents simultaneously. Solution: Implemented A2A (Agent-to-Agent) protocols for structured communication and conflict resolution mechanisms for fundamental disagreements.
🔍 Dynamic Policy Discovery
Challenge: Building a system that works across diverse policy domains (housing, labor, environment) with varying government structures and terminology. Solution: Created a universal policy classification system using Exa API's semantic search capabilities. Implemented cross-domain knowledge bases and automated stakeholder mapping algorithms that adapt to different policy contexts.
⚡ Real-time Debate Streaming
Challenge: Delivering smooth, interactive debate experiences while processing complex LLM operations and maintaining conversation coherence. Solution: Implemented WebSocket architecture with optimized message queuing, response caching, and parallel agent processing. Created modular debate systems that can scale from simple demonstrations to complex multi-stakeholder discussions.
What's next for civic.ai
- This project is just a stepping stone for policy deliberation using AI. Our next steps is to build out an MCP server that allows all agents to connect to our policy discovery server and get valuable insights regarding upcoming government policies.
Built With
- a2a
- anthropic
- claude
- crew
- crewai
- cursor
- exa
- fastapi
- javascript
- mcp
- pytest
- python
- react
- ruff
- sqlite
- supabase
- tailwind
- typescript
- uv
- vite
- weave

Log in or sign up for Devpost to join the conversation.