Crucible is an advanced AI debate engine that orchestrates multiple AI "knights" (expert personas) to analyze complex topics from diverse perspectives. Watch as AI experts debate, challenge each other, and converge on nuanced insightsβall in real-time.
- π€ Multi-Agent Intelligence: Multiple AI personas with distinct expertise debate your questions
- β‘ Real-Time Streaming: Watch debates unfold live with streaming responses
- π Executive Briefs: Generate comprehensive PDF decision briefs from debates
- π° Prebuilt Knights: Access to a library of expert AI personas
- π Self-Hosted: Full control over your data and infrastructure
- π BYOK Model: Bring your own API keysβno vendor lock-in
- Power Users who want to self-host and customize
- Enterprises requiring internal deployment and data control
- Developers who want to extend and contribute
- Researchers exploring multi-agent AI systems
- Decision Makers who need comprehensive analysis from multiple perspectives
| Feature | Description |
|---|---|
| π Multi-Agent Debates | Orchestrate debates between multiple AI personas with distinct expertise |
| π‘ Live Streaming | Real-time debate sessions with streaming responses and live updates |
| π PDF Briefs | Generate comprehensive executive decision briefs from completed debates |
| π° Prebuilt Knights | Library of expert AI personas ready to use |
| π Phase-Based Workflow | Research β Position Cards β Challenges β Rebuttals β Convergence |
| π Self-Hosted | Full control over your data, infrastructure, and deployment |
| π BYOK Model | Bring your own API keysβsupport for OpenAI, Anthropic, OpenRouter, and more |
| π¨ Customizable | Branding, configuration, and extensible architecture |
| π³ Docker Ready | One-command deployment with Docker Compose |
| β‘ Fast Setup | Get running in 3 stepsβno complex configuration needed |
Get Crucible running in 3 simple steps!
- π³ Docker 20.10+ and Docker Compose v2+ (or
docker-composev1.29+)- Install from https://docker.com/products/docker-desktop
- Verify:
docker --versionanddocker compose version
- π Python 3.11+ (only needed for automatic secret generation on first run)
- The wrapper scripts use Python to generate secure secrets
- After
.envis created, Python is no longer needed - Install from https://python.org if missing
- πΎ 4GB RAM minimum, 8GB recommended
- π Ports available:
3000(frontend),8000(API)- Check with:
lsof -i :3000(Linux/macOS) ornetstat -ano | findstr :3000(Windows)
- Check with:
π‘ Tip: API keys are optional during setupβyou can configure them later in the Settings page after login.
Estimated time: 5-10 minutes (depending on internet speed for Docker image downloads)
Time: ~30 seconds
git clone https://github.com/roundtable-labs/crucible-community.git
cd crucible-communityWhat are wrapper scripts?
The wrapper scripts (docker-compose.sh, docker-compose.ps1, docker-compose.bat) are convenience scripts included in this repository that:
- β
Automatically generate secure secrets (if
.envdoesn't exist) - β Start all Docker services with one command
- β Display your login credentials after setup
Why use them? They eliminate manual configurationβjust run one command and everything is set up!
Estimated time: 2-5 minutes (depending on internet speed for Docker image downloads)
What happens:
- Script checks if
.envfile exists - If missing, generates secure secrets (requires Python)
- Starts 6 Docker containers (PostgreSQL, Redis, API, Worker, Beat, Frontend)
- Displays login credentials in terminal
- Services take 30-60 seconds to fully start
Expected output: You'll see Docker pulling images, starting containers, and then your login credentials.
Linux/macOS:
./docker-compose.sh up -dWindows PowerShell (Recommended):
# Open PowerShell (not Command Prompt)
.\docker-compose.ps1 up -dWindows Command Prompt:
# Open Command Prompt (cmd.exe)
.\docker-compose.bat up -dWindows with WSL2:
# If using WSL2, you can use the Linux script
./docker-compose.sh up -d
β οΈ Windows Users:
- Always use
.\prefix when running scripts- Do NOT use
docker-compose.shon Windows (unless using WSL2)- Use
.ps1(PowerShell) or.bat(Command Prompt) instead- PowerShell is recommended for better error messages
-
Wait for services to start (30-60 seconds)
- Verify:
docker compose ps- all services should show "healthy" or "running"
- Verify:
-
Open http://localhost:3000 in your browser
-
Find your login credentials:
- Default email:
admin@community.local - Password: Look in your terminal output for a section that says:
================================================== IMPORTANT: Save your credentials! ================================================== Your secure credentials have been generated: - Authentication password: [YOUR_PASSWORD_HERE] - The password is the value shown after "Authentication password:"
- Default email:
-
Can't find the password? It's also saved in your
.envfile:# Linux/macOS grep ROUNDTABLE_COMMUNITY_AUTH_PASSWORD .env # Windows PowerShell Select-String "ROUNDTABLE_COMMUNITY_AUTH_PASSWORD" .env
β Having trouble? See the Troubleshooting section below for common issues and solutions.
Check all services are running:
docker compose psAll 6 services should show "healthy" or "running" status.
Test the API:
- Open http://localhost:8000/docs in your browser
- You should see the interactive API documentation (Swagger UI)
If services aren't healthy:
- Check logs:
docker compose logs -f - See Troubleshooting section for common issues
When you run the setup for the first time, you'll see output like this in your terminal:
==================================================
IMPORTANT: Save your credentials!
==================================================
Your secure credentials have been generated:
- Authentication password: [Login Password]
- Database user: [Database Username]
- Database password: [Database Password]
- Redis password: [Redis Password]
β οΈ These values are saved in: .env
Keep this file secure and never commit it to version control!
Important: Save your authentication password - you'll need it to log in!
The wrapper scripts automatically:
- β
Generate
.envfile with secure secrets (if missing) - β Start all Docker services (PostgreSQL, Redis, API, Worker, Frontend)
- β Display your login credentials
- β No manual configuration needed!
What's Next?
- β Log in at http://localhost:3000 using the credentials from your terminal
- βοΈ Configure API keys in Settings (optional - you can add them later)
- π Start creating your first debate session!
π‘ Pro Tip: The wrapper scripts work exactly like
docker-composeβthey accept all the same arguments (up,down,logs,ps, etc.).
When you run the installation, Crucible creates:
| Service | Description | Port |
|---|---|---|
| π postgres | PostgreSQL 15 database | 5432 (internal) |
| π΄ redis | Redis 7 cache and session storage | 6379 (internal) |
| π api | FastAPI backend service | 8000 |
| βοΈ worker | Celery worker for background tasks | - |
| β° beat | Celery beat scheduler | - |
| π¨ frontend | Next.js frontend application | 3000 |
- π¦ Docker volumes (data persists between restarts):
postgres_data- Database filesartifacts- Generated PDFs and documents
- βοΈ
.env- Environment variables with auto-generated secrets
These are automatically generated by the setup scripts. You don't need to set them manually.
| Variable | Purpose | Generated Value |
|---|---|---|
API_KEY_ENCRYPTION_KEY |
Encrypts user API keys stored in database | 32-character URL-safe token |
ROUNDTABLE_JWT_SECRET |
JWT token signing for authentication | 48-character URL-safe token |
ROUNDTABLE_JWT_REFRESH_SECRET |
JWT refresh token signing | 48-character URL-safe token |
ROUNDTABLE_COMMUNITY_AUTH_PASSWORD |
Login password for admin@community.local |
16-character URL-safe token |
POSTGRES_USER |
PostgreSQL database username | 12-character alphanumeric |
POSTGRES_PASSWORD |
PostgreSQL database password | 24-character URL-safe token |
REDIS_PASSWORD |
Redis authentication password | 32-character URL-safe token |
These can be set in .env or configured later in the UI Settings page.
| Variable | Purpose | Notes |
|---|---|---|
ROUNDTABLE_OPENROUTER_API_KEY |
OpenRouter API key for LLM access | Can be set in UI Settings after login |
ROUNDTABLE_EDEN_AI_API_KEY |
Eden AI API key for AI research features | Optional, can be set in UI Settings |
ROUNDTABLE_ENABLE_RATE_LIMITING |
Enable rate limiting for LLM API calls | Default: true. Set to false in .env to disable |
ROUNDTABLE_LLM_RATE_LIMIT_TPM |
Rate limit in tokens per minute | Default: 100000. Adjust in .env if needed |
ROUNDTABLE_LLM_RATE_LIMIT_WINDOW_SECONDS |
Rate limit time window in seconds | Default: 60. Adjust in .env if needed |
Security Note: For production deployments, consider hashing the password using:
cd service && python -m scripts.hash_password <your-password>Then update
ROUNDTABLE_COMMUNITY_AUTH_PASSWORDin.envwith the generated hash.
# All services
docker compose logs -f
# Specific service
docker compose logs -f api
docker compose logs -f frontenddocker compose down# Pull latest images and restart
docker compose pull && docker compose up -d# Verify all services are running
docker compose ps# Stop and remove all containers, volumes, and networks
docker compose down -v# Backup PostgreSQL database
# Replace YOUR_POSTGRES_USER with the value from your .env file
docker compose exec postgres pg_dump -U YOUR_POSTGRES_USER roundtable > backup.sql
# Or use the environment variable directly (if available in shell)
docker compose exec -e PGPASSWORD="$POSTGRES_PASSWORD" postgres pg_dump -U "$POSTGRES_USER" roundtable > backup.sql
# Backup .env file (contains encryption keys!)
cp .env .env.backup-
Generate a password hash:
cd service && python -m scripts.hash_password <your-new-password>
-
Update
.envfile:ROUNDTABLE_COMMUNITY_AUTH_PASSWORD=<generated-hash>
-
Restart services:
docker compose restart api
-
Update
ROUNDTABLE_CORS_ORIGINSin.env:ROUNDTABLE_CORS_ORIGINS=https://yourdomain.com
-
Update
NEXT_PUBLIC_API_URLindocker-compose.prod.ymlor frontend environment:NEXT_PUBLIC_API_URL=https://api.yourdomain.com/api
-
Use a reverse proxy (nginx, Traefik, etc.) to handle SSL/TLS termination.
-
Update connection strings in
.envfile (replace placeholders with your actual values):# Replace user, pass, and external-host with your PostgreSQL credentials ROUNDTABLE_DATABASE_URL=postgresql+asyncpg://user:pass@external-host:5432/roundtable # Replace password and external-host with your Redis credentials ROUNDTABLE_REDIS_URL=redis://:password@external-host:6379/0
-
Edit
docker-compose.prod.ymland remove or comment out thepostgresandredisservice definitions (since you're using external services). -
Ensure external databases are accessible and initialized (run
python -m scripts.init_community_dbmanually if needed).
If you prefer to generate secrets manually instead of using wrapper scripts:
Option 1: Using setup scripts (generates secrets and starts services):
# Linux/macOS
./scripts/setup.sh
# Windows PowerShell
.\scripts\setup.ps1Option 2: Generate secrets only, then start services manually:
# Generate .env file with secrets
python3 scripts/generate_secrets.py # or python on Windows
# Then use regular docker-compose
docker compose -f docker-compose.prod.yml up -dUses pre-built images from GitHub Container Registry. Faster startup, no local builds required.
File: docker-compose.prod.yml
Usage:
# Wrapper scripts automatically use production compose file
./docker-compose.sh up -dBuilds from source code. Use this if you're contributing or need to modify the codebase.
File: docker-compose.yml
Usage:
# Build and run from source
docker compose up -d --buildNote: The wrapper scripts (
docker-compose.sh,docker-compose.ps1,docker-compose.bat) automatically use the production compose file. For development, usedocker composedirectly withdocker-compose.yml.
- Install Python 3.8+ from https://python.org
- Ensure
pythonorpython3is in your PATH - Restart your terminal after installing
- Install Docker Desktop from https://docker.com
- Ensure Docker is running
- Restart your terminal after installing
- Don't use
.shfiles on Windows! - Use
.\docker-compose.ps1(PowerShell) or.\docker-compose.bat(Command Prompt)
- Check Docker is running:
docker ps - Check logs:
docker compose logs - Verify
.envfile exists:ls -la .env(Linux/macOS) ordir .env(Windows) - Try regenerating secrets: Delete
.envand run./docker-compose.sh up -dagain (or.\docker-compose.ps1 up -don Windows)
If you see an error like FATAL: database "username" does not exist:
- This usually means there's an old PostgreSQL volume with conflicting data
- Solution: Remove the old volume and restart:
This will delete all data and start fresh. Make sure to backup your
docker compose down -v docker compose up -d
.envfile first!
Can't Access http://localhost:3000
- Check services are running:
docker compose ps - Check frontend logs:
docker compose logs frontend - Verify port 3000 is not in use by another application
- Try accessing http://localhost:8000/docs to verify API is running
- Check
.envfile forROUNDTABLE_COMMUNITY_AUTH_PASSWORD - If password is hashed, you'll need to reset it (see "Change the Default Password" section)
- Or delete
.envand regenerate (WARNING: This makes existing encrypted API keys unreadable!)
- Never commit
.envto version control - It contains sensitive secrets - Backup your
.envfile - If lost, encrypted API keys become unrecoverable - Save your password - Displayed during setup, also stored in
.envfile - For production: Hash passwords using
python -m scripts.hash_password <password> - Keep encryption keys secure - If
API_KEY_ENCRYPTION_KEYchanges, users must re-enter their API keys
This software uses a "Bring Your Own Key" (BYOK) model. You are responsible for:
- Obtaining and managing your own API keys
- All costs associated with API usage
- Complying with API provider terms of service
Roundtable Labs is NOT liable for API costs or provider issues.
See NOTICE.md for complete disclaimers.
- Quick Start Guide - 3-step installation
- First Steps - Post-installation guide
- Environment Variables - Complete variable reference
- Troubleshooting - Common issues and solutions
- Interactive Docs: http://localhost:8000/docs (when running)
- .env.example - Environment variables template
- NOTICE.md - Disclaimers and attribution
Note: For development documentation, API reference, and detailed deployment guides, see
internal_dev_docs/folder.
We welcome contributions! Crucible is open source and built by the community.
- π Read our Contributing Guidelines
- π Check existing Issues and Pull Requests
- π΄ Fork the repository and create a feature branch
- β Sign our Contributor License Agreement (CLA)
- π» Make your changes and add tests
- π Submit a Pull Request
- CONTRIBUTING.md - Contribution guidelines and workflow
- CODE_OF_CONDUCT.md - Community standards and expectations
- CLA.md - Contributor License Agreement
- CHANGELOG.md - Version history and changes
For local development, use docker-compose.yml to build from source:
docker compose up -d --buildSee Development Setup Guide for detailed instructions.
This project is licensed under the AGPL-3.0 (GNU Affero General Public License v3.0) - see the LICENSE file for details.
Note: While the source code is licensed under AGPL-3.0, certain content (knight prompts, personas) is proprietary. See PROMPTS_LICENSE.md for details.
Looking for enterprise features, support, SLA guarantees, or managed hosting?
Visit Roundtable Labs for:
- π’ Enterprise features and support
- π Dedicated support and SLA
- βοΈ Managed hosting options
- π Advanced security features
- π Priority updates and new features
- π Website: roundtablelabs.ai
- π§ Issues: GitHub Issues
- π Documentation: See Documentation section below
- π¬ Questions: Open a Discussion