NOVEMBER

Voice-first autonomous AI assistant

Built on a local FastAPI backend with real-time WebSocket communication and a Three.js frontend. Integrates with Microsoft Outlook, Apple Messages, and Spotify via AppleScript. Powered by Anthropic Claude for reasoning and Fish Audio for voice. Requires macOS, API keys, and Chrome for voice interaction.

NOVEMBER

A voice-first AI assistant that runs on your Mac. Talk to it, and it talks back — with a British butler personality, dry wit, and an audio-reactive particle orb straight out of the MCU.

NOVEMBER connects to Microsoft Outlook (calendar, mail, and notes), Apple Messages, and Spotify. It can browse the web, spawn Claude Code sessions to build entire projects, update its own codebase by voice, and plan your day — all through natural voice conversation.

"Will do, sir."

Author

Built by Alex Imperiale.

Powered by Anthropic Claude and Fish Audio.

Inspired by the AI that started it all — Tony Stark's JARVIS.

Disclaimer: This is an independent fan project and is not affiliated with, endorsed by, or connected to Marvel Entertainment, The Walt Disney Company, or any related entities. The JARVIS name and character are property of Marvel Entertainment.

What It Does

Core

  • Voice conversation — speak naturally, get spoken responses with the NOVEMBER voice

  • Audio-reactive orb — a Three.js particle visualization that pulses and deforms with NOVEMBER's voice

  • Sees your screen — knows what apps and windows are open for context-aware responses

Productivity

  • Reads your Outlook calendar — "What's on my schedule today?" / "Any upcoming meetings?"

  • Reads your Outlook email — "Any unread messages?" (read-only by design)

  • Reads and creates Outlook Notes — save ideas, plans, and lists by voice

  • Manages tasks — "Remind me to call the client tomorrow" with priorities and due dates

  • Remembers things — "I prefer React over Vue" (persists across sessions)

  • Plans your day — combines calendar events, tasks, and priorities into an organized plan

Communication

  • Sends iMessages — "Text John that I'm running late" — sends via Apple Messages

  • Reads iMessages — "What did Sarah say?" — reads recent conversation back to you

  • Checks unread texts — "Any new messages?" — lists who's waiting

Music

  • Controls Spotify — play, pause, skip, go back, shuffle, adjust volume

  • Searches and plays — "Play something by Drake" / "Play Blinding Lights"

  • Track awareness — "What's playing?" gives you artist and song name

Development

  • Builds software — "Build me a landing page" spawns Claude Code to write and run the project

  • Browses the web — "Search for the best restaurants in Austin" opens Chrome

  • Deep research — Claude Opus browses the web and outputs a formatted HTML report

  • Works on projects — "Jump into my-app and check for improvements" connects to any project

  • Updates itself — "Fix yourself" or "Add dark mode to yourself" — NOVEMBER uses Claude Code on its own codebase

Requirements

  • macOS (uses AppleScript for Outlook, Messages, Spotify, and Terminal integration)

  • Microsoft Outlook for Mac (calendar, mail, and notes)

  • Spotify for Mac (music control)

  • Python 3.11+

  • Node.js 18+

  • Google Chrome (required for Web Speech API)

  • Anthropic API key — powers the AI brain (get one here)

  • Fish Audio API key — powers the voice (get one here)

  • Claude Code CLI — for spawning dev tasks (install here)

Quick Start (with Claude Code)

The fastest way to get running:

git clone https://github.com/aleximperiale/november.git
cd november
claude
git clone https://github.com/aleximperiale/november.git
cd november
claude
git clone https://github.com/aleximperiale/november.git
cd november
claude

Claude Code will read the project's CLAUDE.md and walk you through setup step by step — API keys, dependencies, SSL certs, everything.

Manual Setup

# 1. Clone the repo
git clone https://github.com/aleximperiale/november.git
cd november

# 2. Set up environment
cp .env.example .env
# Edit .env with your API keys (see Configuration below)

# 3. Install Python dependencies
pip install -r requirements.txt

# 4. Install frontend dependencies
cd frontend && npm install && cd ..

# 5. Generate SSL certificates (needed for secure WebSocket)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'

# 6. Start the backend (Terminal 1)
python server.py

# 7. Start the frontend (Terminal 2)
cd frontend && npm run dev

# 8. Open Chrome
open http://localhost:5173
# 1. Clone the repo
git clone https://github.com/aleximperiale/november.git
cd november

# 2. Set up environment
cp .env.example .env
# Edit .env with your API keys (see Configuration below)

# 3. Install Python dependencies
pip install -r requirements.txt

# 4. Install frontend dependencies
cd frontend && npm install && cd ..

# 5. Generate SSL certificates (needed for secure WebSocket)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'

# 6. Start the backend (Terminal 1)
python server.py

# 7. Start the frontend (Terminal 2)
cd frontend && npm run dev

# 8. Open Chrome
open http://localhost:5173
# 1. Clone the repo
git clone https://github.com/aleximperiale/november.git
cd november

# 2. Set up environment
cp .env.example .env
# Edit .env with your API keys (see Configuration below)

# 3. Install Python dependencies
pip install -r requirements.txt

# 4. Install frontend dependencies
cd frontend && npm install && cd ..

# 5. Generate SSL certificates (needed for secure WebSocket)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'

# 6. Start the backend (Terminal 1)
python server.py

# 7. Start the frontend (Terminal 2)
cd frontend && npm run dev

# 8. Open Chrome
open http://localhost:5173

Click the page once to enable audio, then speak. NOVEMBER will respond.

Configuration

Edit your .env file:

# Required
ANTHROPIC_API_KEY=your-anthropic-api-key-here
FISH_API_KEY=your-fish-audio-api-key-here

# Optional your name (NOVEMBER will address you personally)
USER_NAME=Alex

# Optional Fish Audio voice model ID
FISH_VOICE_ID=your-voice-model-id
# Required
ANTHROPIC_API_KEY=your-anthropic-api-key-here
FISH_API_KEY=your-fish-audio-api-key-here

# Optional your name (NOVEMBER will address you personally)
USER_NAME=Alex

# Optional Fish Audio voice model ID
FISH_VOICE_ID=your-voice-model-id
# Required
ANTHROPIC_API_KEY=your-anthropic-api-key-here
FISH_API_KEY=your-fish-audio-api-key-here

# Optional your name (NOVEMBER will address you personally)
USER_NAME=Alex

# Optional Fish Audio voice model ID
FISH_VOICE_ID=your-voice-model-id

Voice Command Reference

Calendar & Email

Say

What happens

"What's on my schedule today?"

Reads today's Outlook calendar events

"Any upcoming meetings?"

Lists next events from Outlook

"Check my email"

Reports unread count and recent senders from Outlook

"Any unread mail?"

Same as above

Messages

Say

What happens

"Text John I'm running late"

Sends iMessage to John via Apple Messages

"Message Mom happy birthday"

Sends iMessage to Mom

"What did Sarah say?"

Reads recent iMessages from Sarah

"Check my messages from Dad"

Same, for Dad

"Any new texts?"

Lists all unread iMessage conversations

Spotify

Say

What happens

"Pause the music"

Pauses Spotify

"Resume" / "Play the music"

Resumes playback

"Skip this song" / "Next song"

Skips to next track

"Previous song" / "Go back"

Goes to previous track

"Volume up" / "Turn it up"

Increases volume

"Volume down" / "Turn it down"

Decreases volume

"Shuffle on" / "Toggle shuffle"

Toggles shuffle

"What's playing?"

Reports current artist and track

"Play something by Drake"

Searches Spotify and plays

"Play Blinding Lights"

Same — any song or artist

Development & Projects

Say

What happens

"Build me a to-do app"

Spawns Claude Code to build and run a new project

"Open Claude"

Opens a Terminal with Claude Code

"Jump into my-project"

Connects Claude Code to that project

"Check on the build"

Reports status of the most recent dispatch

"Research the best JS frameworks"

Deep research with web browsing, outputs HTML report

"Pull it up"

Opens the most recently built app in Chrome

Self-Update

Say

What happens

"Fix yourself"

Opens Claude Code inside the NOVEMBER project

"Update yourself"

Same — lets you describe what to change

"Update NOVEMBER"

Same

"Add dark mode to yourself"

Runs Claude Code with that specific task

Screen & System

Say

What happens

"What's on my screen?"

Describes open windows and active app

"Look at my screen"

Same — takes a screenshot and describes it

"What apps are open?"

Lists running applications

Tasks & Memory

Say

What happens

"Remind me to call the client tomorrow"

Creates a task with due date

"What's on my list?"

Reads open tasks

"I prefer React over Vue"

Stores as a persistent memory

"Save that as a note"

Creates an Outlook Note

Architecture

Microphone Web Speech API WebSocket FastAPI Claude Haiku Fish Audio TTS WebSocket Speaker
                                              
                                              ├─ Claude Code Tasks (builds, research, projects, self-update)
                                              
                                              ├─ AppleScript Bridge
                                              ├─ Microsoft Outlook (calendar, mail, notes)
                                              ├─ Apple Messages (send, read iMessages)
                                              └─ Spotify (playback, volume, search)
                                              
                                              └─ SQLite (memory, tasks, dispatch registry)
Microphone Web Speech API WebSocket FastAPI Claude Haiku Fish Audio TTS WebSocket Speaker
                                              
                                              ├─ Claude Code Tasks (builds, research, projects, self-update)
                                              
                                              ├─ AppleScript Bridge
                                              ├─ Microsoft Outlook (calendar, mail, notes)
                                              ├─ Apple Messages (send, read iMessages)
                                              └─ Spotify (playback, volume, search)
                                              
                                              └─ SQLite (memory, tasks, dispatch registry)
Microphone Web Speech API WebSocket FastAPI Claude Haiku Fish Audio TTS WebSocket Speaker
                                              
                                              ├─ Claude Code Tasks (builds, research, projects, self-update)
                                              
                                              ├─ AppleScript Bridge
                                              ├─ Microsoft Outlook (calendar, mail, notes)
                                              ├─ Apple Messages (send, read iMessages)
                                              └─ Spotify (playback, volume, search)
                                              
                                              └─ SQLite (memory, tasks, dispatch registry)

Layer

Technology

Backend

FastAPI + Python (server.py)

Frontend

Vite + TypeScript + Three.js

Communication

WebSocket (JSON + binary audio)

AI (fast responses)

Claude Haiku

AI (deep work)

Claude Opus

TTS

Fish Audio with NOVEMBER voice model

macOS integrations

AppleScript (Outlook, Messages, Spotify, Terminal)

Persistence

SQLite (memory, tasks, sessions)

How the Voice Loop Works

  1. You speak into your microphone

  2. Chrome's Web Speech API transcribes your speech in real-time

  3. The transcript is sent to the server via WebSocket

  4. NOVEMBER detects intent — fast keyword match, or routes to Claude Haiku

  5. Claude generates a response with optional [ACTION:X] tags

  6. Actions are dispatched: Claude Code subprocess, AppleScript, Spotify, Messages

  7. Fish Audio converts the response to speech with the NOVEMBER voice

  8. Audio streams back to the browser via WebSocket

  9. The Three.js orb deforms and pulses in sync with the audio

  10. Background tasks (builds, research, lookups) notify you proactively when done


Key Files

File

Purpose

server.py

Main server — WebSocket handler, LLM integration, full action system

outlook_access.py

Microsoft Outlook calendar, mail, and notes via AppleScript

messages_access.py

Apple iMessage send/read via AppleScript

spotify_access.py

Spotify playback control via AppleScript

memory.py

SQLite memory system with FTS5 full-text search

work_mode.py

Persistent Claude Code sessions for projects

actions.py

System actions — Terminal, Chrome, Claude Code spawning

browser.py

Playwright web automation

planner.py

Multi-step task planning with smart follow-up questions

dispatch_registry.py

Tracks background build and research tasks

screen.py

Screen capture and window awareness

frontend/src/orb.ts

Three.js particle orb visualization

frontend/src/voice.ts

Web Speech API and audio playback

frontend/src/main.ts

Frontend state machine

Action System

NOVEMBER uses [ACTION:X] tags embedded in LLM responses to trigger real system actions:

Tag

What it does

[ACTION:BUILD]

Spawns Claude Code to build a new project from scratch

[ACTION:BROWSE]

Opens Chrome to a URL or search query

[ACTION:RESEARCH]

Deep research via Claude Opus, outputs an HTML report

[ACTION:PROMPT_PROJECT]

Connects Claude Code to an existing project

[ACTION:SEND_MESSAGE]

Sends an iMessage via Apple Messages

[ACTION:READ_MESSAGES]

Reads recent iMessages from a contact

[ACTION:SPOTIFY]

Controls Spotify playback

[ACTION:UPDATE_SELF]

Runs Claude Code against NOVEMBER's own codebase

[ACTION:CREATE_NOTE]

Creates a new Outlook Note

[ACTION:READ_NOTE]

Reads an Outlook Note by title

[ACTION:ADD_TASK]

Creates a task with priority and optional due date

[ACTION:REMEMBER]

Stores a persistent fact about the user

[ACTION:SCREEN]

Captures and describes the current screen

The Interface

  • Orb — the glowing particle visualization in the center; reacts to voice, pulses when listening, swirls when thinking

  • Three-dot menu (top right) — Settings, Restart Server, Fix Yourself

  • Settings panel — enter API keys, test Outlook/Messages/Spotify connectivity, set your name

  • Mute button — toggles listening on/off

  • Restart Server — restarts the backend if something seems stuck

  • Fix Yourself — opens Claude Code in NOVEMBER's own project directory

More solutions