AI-powered city council debate simulator for data center proposals. 5 AI agents debate a data center proposal in a simulated city council meeting, streaming in real-time.
SaferSkills independently audited council-sim (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
AI-powered city council debate simulator for data center proposals
Problem Statement 3: Amplify Human Judgment
Built for the Built with Opus 4.6: Claude Code Hackathon (Feb 10–16, 2026)
<br />
CouncilSim
</div>
Over $64 billion in data center projects have been blocked or delayed by local opposition. Petitioners walk into city council meetings unprepared for the intensity of community pushback — emotional arguments about water usage, property values, noise, and environmental impact. Critical AI infrastructure isn't getting built.
CouncilSim creates a realistic multi-agent debate simulation where:
Upload a real proposal PDF — the kind found on any city council meeting agenda — and watch five AI personas debate it live. Walk into your next council meeting knowing every concern before it's raised. (We built and tested CouncilSim using this Van Buren Township, MI planning commission packet — download it and try it yourself!)
Go from rejected to approved — with confidence.
CouncilSim uses a hybrid architecture that leverages both the Claude Agent SDK and the direct Anthropic API:
Claude Agent SDK (intelligence layer):
Anthropic API (debate engine):
3 Custom MCP Tools:
research_city — Structures city demographic queriesparse_proposal_document — Extracts structured proposal datacompute_approval_score — Weighted scoring formula with 6 debate factors| Layer | Technology |
|---|---|
| Backend | Python 3.10 / FastAPI / Uvicorn |
| AI — Agents | Claude Agent SDK (4 subagents + 3 MCP tools) |
| AI — Debate | Anthropic Python SDK / Claude Opus 4.6 |
| Frontend | React 19 / TypeScript / Vite / Tailwind CSS v4 |
| Real-time | WebSockets (FastAPI native) |
| Animations | Framer Motion |
| Deployment | Railway (backend) + Vercel (frontend) |
├── backend/
│ ├── main.py # FastAPI app entry point
│ ├── config.py # Settings (pydantic-settings)
│ ├── api/
│ │ ├── routes.py # REST: POST /simulations, GET /simulations/:id
│ │ └── websocket.py # WebSocket: /ws/simulation/:id
│ ├── agents/
│ │ ├── orchestrator.py # Coordinates 4 Agent SDK subagents
│ │ ├── persona_agent.py # Persona generation (Opus 4.6)
│ │ ├── document_agent.py # Document analysis (Sonnet 4.5)
│ │ ├── analysis_agent.py # Debate analysis (Opus 4.6)
│ │ ├── community_research.py # Real community sentiment (Opus 4.6)
│ │ └── tools/ # Custom MCP tools
│ ├── debate/
│ │ ├── engine.py # 5-phase debate orchestration
│ │ ├── personas.py # System prompt templates
│ │ ├── turns.py # Streaming turn generation
│ │ └── transcript.py # Context management
│ ├── models/ # Pydantic data models
│ └── services/
│ ├── simulation_manager.py # In-memory state store
│ └── stream_manager.py # WebSocket broadcast
├── frontend/
│ └── src/
│ ├── components/
│ │ ├── landing/ # LandingPage with PDF upload
│ │ ├── chamber/ # CouncilChamber, TranscriptFeed, SpeakerPanel
│ │ └── results/ # ResultsDashboard, ApprovalMeter, TranscriptExport
│ ├── hooks/useSimulation.ts # WebSocket + state management
│ └── types/ # TypeScript types mirroring backend
├── Dockerfile
├── railway.toml
└── CLAUDE.mdcd backend
pip install -r requirements.txt
# Set environment variables
cp ../.env.example ../.env
# Edit .env and add your ANTHROPIC_API_KEY
# Run the backend (from project root)
cd ..
uvicorn backend.main:app --reloadThe backend runs at http://localhost:8000.
cd frontend
npm install
npm run devThe frontend runs at http://localhost:5173.
| Variable | Description | Default |
|---|---|---|
ANTHROPIC_API_KEY | Your Anthropic API key | Required |
ENVIRONMENT | development or production | development |
FRONTEND_URL | Frontend URL for CORS | http://localhost:5173 |
VITE_API_BASE_URL | Backend API URL (frontend) | http://localhost:8000 |
VITE_WS_BASE_URL | Backend WebSocket URL (frontend) | ws://localhost:8000 |
ANTHROPIC_API_KEY environment variablefrontend/ directory to VercelVITE_API_BASE_URL and VITE_WS_BASE_URL to your Railway URLProblem Statement 3: Amplify Human Judgment — CouncilSim helps petitioners prepare for city council meetings without replacing human decision-making. It surfaces the arguments they'll face, tests their responses, and provides data-backed rebuttals — dramatically sharpening preparation while keeping humans in the loop.
Built with Claude Code: The entire codebase — backend, frontend, agent orchestration, MCP tools, and even the demo video (built with Remotion) — was written by Claude Opus 4.6 in Claude Code. From architecture decisions to pixel-level UI polish, Claude Code was the sole development environment.
Why Opus 4.6: The multi-agent debate requires nuanced persona management (each agent has conflicting goals), deep contextual reasoning (building on previous arguments), and strategic analysis (post-debate recommendations). Opus 4.6 powers the persona generation, community research, debate turns, and analysis — the entire intelligence layer.
Real-world impact: Data centers are critical infrastructure for AI. Anthropic itself committed to covering 100% of consumer electricity price increases from data centers (Feb 2026). CouncilSim directly helps get that infrastructure built by preparing petitioners for the toughest questions.
MIT License
<div align="center">
Built entirely with [Claude Code](https://claude.ai/claude-code) — every line of backend, frontend, and video production code was written by Claude Opus 4.6 in Claude Code.
Go from rejected to approved — with confidence.
</div>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.