1dffaae822083c813c77f86374d23770142ba2d4
AsyncEventBridge bridges sync EventEmitter to asyncio consumers. FastAPI app with session management, discussion control, roles/providers. WebSocket for real-time events + inject, SSE for read-only streaming. Minimal dark-theme HTML/JS UI. `meeting-room serve` CLI subcommand. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Meeting Room
Multi-agent discussion framework — role-based AI agents debate problems and produce solutions.
Install
git clone <repo-url> meeting-room
cd meeting-room
pip install -e .
# With dev dependencies (pytest, pytest-mock)
pip install -e ".[dev]"
# With web server dependencies (Phase 2)
pip install -e ".[web]"
Quick Start
# Initialize workspace (creates .meeting-room/ in current directory)
meeting-room init
# Run a discussion with default scenario
meeting-room -s example-saas.md
# Run and save result to sessions/
meeting-room -s scenarios/my-problem.md --save
# Cross-LLM code review — point agents at a project
meeting-room -s code-review.md -w /path/to/project
# List available scenarios and roles
meeting-room --list-scenarios
meeting-room --list-roles
Workspace Structure
.meeting-room/
├── config.yaml — override default config (roles, providers, tools)
├── scenarios/ — your .md scenario files
│ └── example.md
├── sessions/ — saved discussion results (gitignored)
└── .gitignore
Commands
meeting-room init [path] # Create .meeting-room workspace
meeting-room -s scenarios/my.md # Run discussion
meeting-room -s scenarios/my.md --save # Run and save result
meeting-room -s code-review.md -w /path # Code review on a project
meeting-room --list-scenarios # Show available scenarios
meeting-room --list-roles # Show roles and model bindings
meeting-room -c /path/to/config.yaml -s ... # Custom config file
meeting-room -w /path/to/project -s ... # Set workdir for file tools
Built-in Scenarios
| Scenario | Description |
|---|---|
example-saas.md |
General discussion: SaaS architecture with moderator/skeptic/idea_generator/analyst |
code-review.md |
Cross-LLM code review with defender/attacker/security/moderator |
Architecture (v2)
┌──────────┐ events ┌───────────────┐
│ CLI │◄────────────│ DiscussionEngine │
│ (ANSI) │ │ (event-driven) │
└──────────┘ └───────┬───────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ APIClient│ │ToolRegistry│ │EventEmitter│
└──────────┘ └──────────┘ └──────────┘
- DiscussionEngine — orchestrates round-robin discussion, emits events (no print calls)
- APIClient — class-based, multi-provider (OpenAI-compatible APIs)
- ToolRegistry — class-based, pure Python (Windows compatible)
- EventEmitter — synchronous pub/sub bus (Phase 2: AsyncEventBridge for WebSocket)
- Pydantic v2 models — typed config, messages, sessions
Configuration
Config Search Order
--configCLI argument.meeting-room/config.yaml(searched from CWD upward)- Built-in package defaults
API Keys
Set via environment variables:
export MEETING_ROOM_ROUTERAI_API_KEY="sk-..."
export MEETING_ROOM_ROUTERAI_BASE_URL="https://routerai.ru/api/v1"
export MEETING_ROOM_OPENAI_API_KEY="sk-..."
export MEETING_ROOM_ANTHROPIC_API_KEY="sk-ant-..."
export MEETING_ROOM_DEEPSEEK_API_KEY="sk-..."
Or use ${ENV_VAR} placeholders in config.yaml.
Roles
Each role binds to a provider + model + tool set:
roles:
defender:
name: "Defender"
provider: anthropic # one LLM defends
model: "claude-sonnet-4-6"
tools: "readonly"
attacker:
name: "Attacker"
provider: openai # another LLM attacks
model: "gpt-4o"
tools: "readonly"
security:
name: "Security"
provider: deepseek # third LLM checks security
model: "deepseek-chat"
tools: "web"
Tool Sets
| Set | Tools |
|---|---|
| all/full | Everything (files + web + commands) |
| files | read_file, list_files, search_in_files, write_file |
| readonly | read_file, list_files, search_in_files |
| web | web_search, web_fetch |
| none | No tools, text only |
| (list) | ["read_file", "web_search"] — custom mix |
Scenarios
Markdown with YAML frontmatter:
---
name: "My Problem"
participants:
- moderator
- skeptic
- idea_generator
- analyst
max_rounds: 6
---
# The Problem
Full Markdown description...
## Context
- Budget: $50K
- Team: 3 people
## Questions
1. What tech stack?
2. How to scale?
Roadmap
- Phase 1: Core refactor — Pydantic models, EventEmitter, class-based APIClient/ToolRegistry, DiscussionEngine, backward-compatible CLI
- Phase 2: Web server — FastAPI + WebSocket + SSE, REST API, minimal HTML UI,
meeting-room serve - Phase 3: Interactivity — Boss role, CSO injection, Setup Wizard, BrainstormEngine
- Phase 4: Artifacts — LLM extraction → .tasks/.wiki, SessionArchive
License
MIT
Description
Multi-agent discussion framework — role-based AI agents debate problems and produce solutions
Languages
Python
94.4%
HTML
5.6%