An AI-powered multi-agent classroom that turns any topic into an interactive learning experience.
Features · Quick Start · Architecture · Testing · Structure · Contributing
Nova is a multi-agent teaching platform. Give it a topic and an AI teacher generates a structured course outline, produces slides, writes narration scripts, and delivers the lesson in a virtual classroom. Multiple AI agents collaborate — a teacher leads the lecture, an assistant answers questions, and a class clown keeps the mood light.
The core idea: not just a slide generator, but a complete teaching system with role separation, safety guardrails, and knowledge tracking.
- AI Outline Generation — Breaks a topic into progressive scenes ordered by knowledge dependencies
- Slide Production — Each scene ships with titles, bullet points, and flow diagrams
- Voice Narration — The AI teacher narrates each scene with natural TTS across multiple engines
- Interactive Quizzes — Auto-generated multiple-choice and fill-in-the-blank questions with real-time scoring
- Knowledge Graph — Visual concept maps that connect key ideas across the course
- PBL Mode — Project-based learning with interactive practice tasks
| Agent | Role | Permissions |
|---|---|---|
| AI Teacher | Leads the lesson, explains core concepts | Speak, slide control, spotlight, whiteboard |
| AI Assistant | Supports the teacher, answers questions | Speak, whiteboard, slide control |
| Class Clown | Lightens the mood | Speak |
- Role Persistence — Customize names, descriptions, and permissions for 10 built-in roles; changes persist across sessions
- Runtime Constraints — Per-role
max_actionsandmax_turnsenforced at runtime - Discussion Orchestration — A Director Graph manages turn-taking and discussion flow
- 34 Templates — Covering outline generation, content creation, action sequencing, and quiz generation
- Snippet System — Role guidelines and action types stored as Markdown snippets, editable without recompiling
- Guardrails — PII detection, toxicity filtering, and hallucination scanning on every generated scene
- Skill Registry — 5 registered skills gated by a whitelist
- REST API —
GET /api/promptsto list templates,GET /api/skillsto list skills
17 LLM Providers
| Provider | Example Models |
|---|---|
| OpenAI | GPT-5.6, GPT-5.4 |
| Azure OpenAI | User-defined deployments |
| Anthropic | Claude Opus 4.8, Claude Sonnet 4.6 |
| Gemini 3.5 Flash, Gemini 2.5 Pro | |
| DeepSeek | DeepSeek-V4-Pro, DeepSeek-V4-Flash |
| Qwen | Qwen3.7 Plus, Qwen3.6 Flash |
| GLM | GLM-5.2, GLM-4.6 |
| Kimi | Kimi-K2.7, Kimi-K2.6 |
| MiniMax | MiniMax-M3 |
| SiliconFlow | Full model aggregation |
| Doubao | Doubao Seed series |
| OpenRouter | DeepSeek, and more |
| Grok | Grok 4.20, Grok 4.1 |
| Tencent Hunyuan | Hy3 Preview |
| Xiaomi MiMo | MiMo V2.5 Pro, MiMo V2 |
| Ollama | Local models |
| Lemonade | Local AMD models |
- TTS — OpenAI, SiliconFlow, Doubao, Minimax, Volcano
- Image Generation — SiliconFlow, Minimax, ComfyUI
- Web Search — Tavily, SearXNG
- Document Parsing — AliDocMind, MinerU
- MCP Tools — Connect external tools via Model Context Protocol
- i18n — English, Simplified Chinese, Traditional Chinese, Japanese, Korean, Arabic, Portuguese, Russian
- Dark Mode — Site-wide support
- Quota Management — Per-user generation quotas with
QUOTA_EXCEEDED(402) responses - Input Validation — All generation API routes validate input length, topic, and requirements
- Audit Logging — All API actions logged with retention policies (90-day default)
- Rate Limiting — Configurable per-endpoint rate limits
- SSRF Protection — URL allowlist/denylist for outbound requests
- Content Moderation — PII detection, toxicity filtering, and hallucination scanning
- Role-Based Access — 10 configurable agent roles with fine-grained permissions
- Knowledge Tracing — Bayesian knowledge tracing for student progress tracking
Data flow: user enters a topic → the prompt engine assembles the prompt → LLM generates content → guardrails scan for safety → multi-agent orchestration → interactive classroom rendering. State is persisted to browser-local storage via Zustand.
- Node.js 22+
- pnpm 10+
git clone https://gitcode.com/badhope/nova.git
cd nova
pnpm installCreate a .env.local file with at least one LLM provider:
# Option A: direct API key
OPENAI_API_KEY=your-key
OPENAI_BASE_URL=https://api.openai.com/v1
# Option B: server-side managed config (recommended)
cp server-providers.yml.example server-providers.yml
# Edit server-providers.yml with your credentials — keys stay server-sideOptional environment variables:
DEFAULT_MODEL=openai:your-model # Default LLM model (provider:model format)
LLM_TIMEOUT_MS=300000 # LLM request timeout in milliseconds
FALLBACK_MODELS=openai:model2,openai:model3 # Comma-separated fallback models
LLM_THINKING_DISABLED=true # Disable thinking/reasoning tokens
SKIP_TS_CHECK=true # Skip TypeScript checking during buildpnpm devOpen http://localhost:3000 and enter a topic to start.
pnpm build # Build for production
pnpm start # Start production serverNote: If the build runs out of memory during TypeScript checking, use
SKIP_TS_CHECK=true pnpm build.
Click "Open Cached Demo Course" on the home page to load a pre-built Introduction to AI course — no API key required.
pnpm test # Unit & component tests (340 files / 3155 cases)
pnpm test:e2e # End-to-end tests (Playwright)
pnpm test:e2e:ui # E2E with interactive UI
pnpm lint # ESLint
pnpm typecheck # TypeScript type checkingE2E tests cover the full flow: home → generation → classroom navigation → quiz interaction. All tests use mock APIs — no LLM key needed.
nova/
├── app/ # Next.js App Router
│ ├── api/ # API routes (prompts, skills, generate/*)
│ └── [locale]/ # i18n routing
├── lib/ # Core logic
│ ├── ai/ # Multi-LLM provider integration
│ ├── agent/ # Multi-agent runtime
│ ├── choreography/ # Animations & effects
│ ├── guardrails/ # Safety pipeline
│ ├── orchestration/ # Role management & constraints
│ └── prompts/ # Prompt templates & snippets
├── components/ # React components
├── packages/ # Workspace sub-packages
│ └── @nova/
│ ├── dsl/ # Domain type definitions
│ ├── renderer/ # Slide rendering engine
│ ├── importer/ # Document import
│ └── storage/ # Persistence layer
├── e2e/ # Playwright tests
├── configs/ # Shared constants
└── assets/ # Static assets & logo
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) |
| Language | TypeScript 5.9 |
| UI | React 19, Tailwind CSS 4, Radix UI |
| State | Zustand (persisted) |
| AI | Vercel AI SDK, multi-provider |
| Testing | Vitest, Playwright |
| Package Manager | pnpm Workspaces |
Issues and pull requests are welcome. Please read CONTRIBUTING.md before submitting.
This repository is primarily hosted on GitHub and mirrored to GitCode and Gitee for accessibility.
| Platform | URL |
|---|---|
| GitHub (primary) | https://github.com/weed33834/nova |
| GitCode (mirror) | https://gitcode.com/badhope/nova |
| Gitee (mirror) | https://gitee.com/badhope/nova |
Content is synchronized manually across platforms. GitHub is the canonical source.