AI Dungeon Master. Everett's cloned voice narrates. NPCs speak in their own synthetic voices. RAG over campaign lore and D&D rules. Real-time Discord voice integration.
See CLAUDE.md for the full identity and architecture doc.
See roadmap.md for the phased build plan.
Working voice pipeline inherited from the josef-voice project:
You speak → Discord (Opus 48k) → VAD on silence
→ ElevenLabs Scribe (STT) → transcript
→ Claude brain (persona, context)
→ ElevenLabs Flash v2.5 (streaming TTS) → Opus → speaks in channel
- Auto-follows you into voice channels
- Real-time STT + TTS, latest-utterance-wins (no stale reply queue)
- Persona lives in
persona.md— edit to retune without touching code - Voice ID in
voice-config.json
cd C:\Users\derek\Documents\GitHub\Everett_DM
npm install
npm run preflight # checks token, ElevenLabs key, voice id, ffmpeg
npm startDISCORD_BOT_TOKEN=...
ELEVEN_API_KEY=...
OWNER_USER_ID=... # optional: only respond to this Discord user ID
VOICE_GUILD_ID=... # optional: restrict to one server
BRAIN_MODEL=claude-haiku-4-5 # or claude-sonnet-4-6 for deeper answers
src/index.js orchestrator: auto-follow, per-turn pipeline
src/voice.js Discord receive (Opus→WAV) + playback
src/stt.js ElevenLabs Scribe speech-to-text
src/tts.js ElevenLabs Flash streaming TTS
src/brain.js Claude brain (swappable)
src/config.js config + system prompt builder
src/log.js logger
preflight.js readiness check
persona.md DM persona / system prompt (edit this to retune)
voice-config.json ElevenLabs voice ID + model
CLAUDE.md project identity and architecture
roadmap.md phased build plan