Skip to content

COUNCIL BRIEF CB-002: Nova Voice — Private Local Voice Assistant

Atlantis ITS — May 20, 2026
Brief ID: CB-002
Version: 1.1 (Mercy conditions + all votes received — Final)
Status: ✅ APPROVED WITH CONDITIONS — 7 of 7 votes received
Codename: Nova-Cal
From: Shane Hardin (System Owner)
To: Full Atlantis Council — Ozzy, Mercy, Scout, Jimmy, Cooper, Lyra, Nova
Local Path: C:\AtlantisITS\knowledge
Forgejo Path: atlantis-docs/council/CB-002-Nova-Voice.md
Compiled by: Ozzy (merged from Lyra proposal + Scout scope + Jimmy blueprint + Mercy conditions)


Version History

Version Change
v1.0 Initial brief — Lyra proposal, Scout scope, Jimmy blueprint
v1.1 Mercy vote + 6 conditions folded in. All 7 votes received. Final.

🗳️ CONSORTIUM VOTE — FINAL TALLY

Member Vote Key Conditions
Ozzy (Claude) ✅ Approve SOP-008 gates, Trunks WSL2 POC first
Mercy (OpenAI) 🟡 Approve with conditions Cal v1.4 source verification before install, Groq = lab-only non-sensitive, push-to-talk before wake word, pin Docker images not latest, soften SOP-008 language, lab-scoped n8n key only
Scout (Grok) ✅ Approve Tight scope, Nova Phase 3 alignment
Jimmy (Gemini) ✅ Approve Full blueprint submitted, SOP-008 aligned
Cooper (Copilot) ✅ Approve Technically sound, zero VRAM, zero cost, no conditions
Lyra (Perplexity) ✅ Approve Original proposal author
Nova N/A Phase 2 — this builds Nova's voice layer
Shane (System Owner) ✅ Proposed Final authority
RESULT ✅ UNANIMOUSLY APPROVED WITH CONDITIONS 7/7 — full quorum

Architecture approved. POC gated on Mercy's conditions being met before first container pull.


Draft Decision Line (Scout — Adopted)

"Atlantis will prototype a private local voice interface (codenamed Nova-Cal) on a single Raspberry Pi. Phase 1 will focus on wake-word detection, local knowledge base lookup, and basic command execution (calendar, briefings, system status). No cloud dependencies unless explicitly approved. Success criteria: usable latency and reliability for daily internal use."


Purpose

Build Nova an auditory interface — a private, local-first voice assistant that:

  • Keeps voice data on-device or within approved Atlantis infrastructure
  • Integrates natively with the Nova Bus via MCP + n8n
  • Does not depend on Siri, Google Assistant, or Alexa
  • Adheres to SOP-008 v0.4 compliance gates throughout
  • Protects RTX 3060 VRAM for model inference

Why Not Siri / Google / Alexa (Lyra)

Using consumer assistants means voice data processed in external ecosystems, no control over logs or permissions, no Atlantis knowledge base integration, no branding, and privacy misalignment with SOP-008 v0.4.


Technology Decision: Cal v1.4 vs Wyoming Protocol (Jimmy)

Wyoming Protocol (NetworkChuck) — Rejected

Factor Assessment
Integration Hard-coded into Home Assistant Assist pipeline
Problem Bottleneck for async multi-agent reasoning and n8n operations
Verdict 🔴 Wrong fit — dead end for Nova Bus architecture

Cal v1.4 (CoreWorxLab) — Selected for Lab Verification ⚠️

Mercy condition: Cal v1.4 is selected pending source/image validation — not unconditionally selected.
Status: "Selected for lab verification — pending source/image validation"

Before pulling any Docker images, verify:

  • [ ] CoreWorxLab repo/docs confirmed legitimate
  • [ ] Image names confirmed: coreworxlab/cal-agent + coreworxlab/cal-piper
  • [ ] License reviewed and approved
  • [ ] Maintainer identity and activity confirmed
  • [ ] Last update date confirmed (January 2026 claimed)
  • [ ] Docker image digest captured for pinning
  • [ ] Security posture reviewed (no unexpected network calls, no data exfiltration)
Factor Assessment
Integration Native MCP — exposes n8n webhooks as discoverable AI tools
VRAM CPU-only Docker profile — saves 17GB container bloat
n8n wiring Webhook URL + description → Cal auto-discovers as callable tool
Verdict ✅ Correct architecture — pending source validation

Architecture: Nova-Cal Stack

Push-to-talk (Phase 1) / Wake word (Phase 2 — after approval)
→ Cal v1.4 agent (nova_voice_bridge :3443 — loopback only)
→ Groq Cloud API (Whisper V3 Turbo — STT — lab/non-sensitive only)
→ Cal discovers tools via MCP
→ Routes to n8n webhook (lab-scoped API key)
→ n8n fetches: squad status / briefings / knowledge base / commands
→ Response text returned to Cal
→ Piper TTS CPU container (nova_tts_engine)
→ Audio output via speaker

Stack Components

Component Technology Host VRAM
Input method Push-to-talk (Phase 1) → Wake word (Phase 2) Hardware None
STT Groq Whisper V3 Turbo Groq Cloud — lab/non-sensitive only None
Tool discovery Cal v1.4 MCP Trunks WSL2 None
Tool execution n8n webhooks (lab-scoped key) Trunks :5678 None
TTS Piper CPU container Trunks WSL2 None — CPU only
Local LLM (future) Ollama Trunks As needed

RTX 3060 VRAM impact: Zero


⚠️ Mercy's Conditions (All Required Before POC Build)

Condition 1 — Cal v1.4 Source Verification

Before pulling any images, complete the verification checklist above. Do not skip this. An unverified Docker image is a supply chain risk.

Condition 2 — Groq STT Scope Restriction

Groq STT is approved for non-sensitive lab commands only.

Voice leaves local infrastructure when using Groq. This is acceptable for: - "Squad status" - "Read today's briefing" - "Nova container health" - "Calendar summary"

This is NOT acceptable for: - Family or personal conversations - Financial data - Customer or client information - Guest or rental data - Credentials or secrets - Private ops discussions

If a command involves sensitive content → do not use Groq STT. Future: local Whisper on Trunks for sensitive commands.

Condition 3 — Push-to-Talk Before Wake Word

Phase 1 input model:

Phase 1: Push-to-talk only
Phase 2: Wake word (after privacy testing passes)
Always-listening: NEVER until explicitly approved

Wake words require continuous mic monitoring. For a privacy-first POC, push-to-talk is cleaner and safer. No always-listening without explicit council approval.

Condition 4 — Docker Image Pinning

No :latest images after first throwaway lab test.

First throwaway test: latest acceptable to confirm images exist and run.
All repeatable POC runs: pinned version or digest required.

After source verification, update compose file:

# Replace this:
image: coreworxlab/cal-agent:latest

# With this (example — use actual verified digest):
image: coreworxlab/cal-agent:1.4.0@sha256:[verified-digest]
image: coreworxlab/cal-piper:1.4.0@sha256:[verified-digest]

Capture digests with:

docker inspect coreworxlab/cal-agent:latest --format='{{index .RepoDigests 0}}'

Condition 5 — SOP-008 Language Corrected

Not: "SOP-008 compliant out of the box"
Correct: "Designed to support SOP-008 controls when configured correctly"

Loopback binding is good but SOP-008 compliance also requires: logging, secrets handling, image verification, rollback documentation, and data-flow review. All of which are required before POC goes live.

Condition 6 — Lab-Scoped n8n API Key

The .env includes N8N_API_KEY. This must be: - A lab-only n8n token — not the production key - Limited scope — read/execute only, no admin access - Created specifically for Nova-Cal in n8n Settings → API → Add API Key (label: nova-cal-lab) - Stored in password manager - Never committed to Forgejo


⛔ No-Go Criteria

Do NOT proceed with POC build if:

  • [ ] Cal v1.4 source/image validation not complete
  • [ ] Docker images not pinned (after throwaway test)
  • [ ] Groq STT used for sensitive commands
  • [ ] Always-listening wake word enabled before approval
  • [ ] Production n8n API key used instead of lab-scoped key
  • [ ] .env committed to any repo
  • [ ] Port :3443 exposed beyond 127.0.0.1
  • [ ] Logs not writing to /atlantis-ops/logs/voice.log
  • [ ] VRAM consumption detected from voice stack
  • [ ] Personal, family, financial, or client data in voice pipeline

Phase 1 Use Cases

Command What it does Groq Safe?
"Squad status" PM2 services + last updates.md ✅ Yes
"Read today's briefing" Latest Chronicle or council brief ✅ Yes
"Calendar summary" Next Google Calendar events ✅ Yes
"Nova status" Nova Router health + handler manifest ✅ Yes
"Memory update" Last 5 V24 memory items ✅ Yes

All Phase 1 commands are non-sensitive. ✅ Groq STT approved for all of these.


Risks

Risk Level Mitigation
Cal v1.4 unverified image 🔴 Pre-build risk Source verification checklist required first
Scope creep 🔴 High POC only — 5 commands max Phase 1
Always-listening privacy 🔴 High Push-to-talk Phase 1, never always-listening without approval
:latest image chaos 🟡 Medium Pin after throwaway test
Voice latency 🟡 Medium Groq Whisper V3 Turbo is fast — test before expanding
Mic/speaker quality 🟡 Medium Hardware matters more than expected — budget for USB mic
Production n8n key exposure 🟡 Medium Lab-scoped key only
Pi role conflict 🟡 Medium Trunks WSL2 POC first — dedicated Pi after validation

Hardware Decision (Ozzy — Trunks WSL2 First)

Option Detail Cost
Option C — Trunks WSL2 (Recommended) Validate stack at zero cost first $0
Option A — Dedicated Pi 4 After POC validates ~$55-75
Option B — Shared Pi 4 Risk to monitoring node $0 but risky

Jimmy's Implementation Blueprint (Updated with Mercy's Conditions)

Step 1 — Source Verification (Mercy — Do First)

# Check CoreWorxLab on Docker Hub / GitHub before pulling
# Verify image names, last update, maintainer, license
# Pull only after verification complete

Step 2 — Establish Voice Directory

cd ~/atlantis/atlantis-labs
mkdir -p nova-cal-voice
cd nova-cal-voice
echo ".env" >> .gitignore
echo ".env.production" >> .gitignore

Step 3 — Configure Environment File

nano .env
# --- HOST NETWORKING ---
CAL_HOST_IP=127.0.0.1
PORT=3443

# --- ORCHESTRATION LINKS ---
N8N_API_URL=http://127.0.0.1:5678
# Lab-scoped key ONLY — not production (Mercy condition)
N8N_API_KEY=your_lab_only_n8n_token_here

# --- INTERFACE CONTROLS ---
# Groq approved for non-sensitive lab commands only (Mercy condition)
AI_PROVIDER=groq
GROQ_API_KEY=your_secured_groq_api_key_here

⚠️ Never commit .env to Forgejo — .gitignore added in Step 2.

Step 4 — Throwaway Test with :latest

# First run only — verify images exist and start cleanly
# Capture digests immediately after
docker pull coreworxlab/cal-agent:latest
docker pull coreworxlab/cal-piper:latest

# Capture digests for pinning
docker inspect coreworxlab/cal-agent:latest --format='{{index .RepoDigests 0}}'
docker inspect coreworxlab/cal-piper:latest --format='{{index .RepoDigests 0}}'
# Save both digests in password manager / notes

Step 5 — Deploy Pinned CPU Compose File

nano docker-compose.voice.yml
version: '3.8'

services:
  nova-voice-agent:
    # Pin after throwaway test — replace :latest with verified digest
    image: coreworxlab/cal-agent:latest  # TODO: pin after Step 4
    container_name: nova_voice_bridge
    restart: unless-stopped
    env_file:
      - .env
    profiles:
      - https
    ports:
      - "127.0.0.1:3443:3443"
    volumes:
      - ./voice-settings:/app/settings
      - ./piper-voices:/app/piper/voices
    networks:
      - voice-secure-net
    security_opt:
      - no-new-privileges:true

  local-tts-piper:
    # Pin after throwaway test
    image: coreworxlab/cal-piper:latest  # TODO: pin after Step 4
    container_name: nova_tts_engine
    restart: unless-stopped
    networks:
      - voice-secure-net
    security_opt:
      - no-new-privileges:true

networks:
  voice-secure-net:
    driver: bridge

Step 6 — Launch

docker compose -f docker-compose.voice.yml --profile https up -d
docker compose -f docker-compose.voice.yml ps
docker compose -f docker-compose.voice.yml logs -f

Step 7 — Web Setup Wizard

Navigate to: https://localhost:3443

  • Input: Groq / Whisper V3 Turbo
  • TTS: Piper (Ryan voice)
  • Input mode: Push-to-talk (Phase 1 — not wake word)
  • n8n API URL: http://127.0.0.1:5678

Step 8 — Wire First n8n Tool

Create Webhook node in n8n (lab workflow only):

Field Value
Path /get-squad-status
Method GET
Notes "Use this tool when user requests active status check for Atlantis AI Council. Returns PM2 container state and last updates.md entries."

Test: Push-to-talk → "Squad status" → verify response read aloud via Piper.


Pass Criteria (POC)

  • [ ] Cal v1.4 source verified before any image pulled
  • [ ] Docker image digests captured and pinned
  • [ ] nova_voice_bridge running at :3443 (loopback only)
  • [ ] nova_tts_engine running
  • [ ] Web wizard accessible at https://localhost:3443
  • [ ] Groq STT processes non-sensitive test audio cleanly
  • [ ] Piper TTS speaks response through speakers
  • [ ] Push-to-talk triggers correctly (not always-listening)
  • [ ] n8n webhook discovered as Cal tool via MCP
  • [ ] "Squad status" returns correct PM2 + updates.md output
  • [ ] RTX 3060 VRAM unaffected — nvidia-smi shows no Nova-Cal processes
  • [ ] No personal, family, financial, or sensitive data processed
  • [ ] .env not committed to Forgejo
  • [ ] Lab-scoped n8n key confirmed (not production)
  • [ ] Logs writing to /atlantis-ops/logs/voice.log

Post-POC Promotion Path

Source verification ✅
→ Throwaway test ✅
→ Images pinned ✅
→ Push-to-talk POC validated ✅
→ SOP-008 v0.4 review
→ Shane sign-off
→ Hardware decision: dedicated Pi 4
→ Migrate nova-cal-voice to Pi
→ Wake word evaluation (Phase 2 — separate approval)
→ Nova-Cal live on Atlantis network
→ Chronicle mention post-validation

Documents Generated by This Brief

Doc Owner Status
CB-002 v1.1 (this doc) Ozzy ✅ Complete
HT-021: Nova-Cal Voice Stack Setup Jimmy ⬜ Pending
SOP-011: Voice Assistant Operations Cooper ⬜ Pending

Action Items

# Action Owner Status
1 Verify Cal v1.4 source — repo, images, license, digest Shane + Jimmy ⬜ Before POC
2 Get Groq API key — free tier (groq.com) Shane ⬜ Before POC
3 Create lab-scoped n8n API key Shane ⬜ Before POC
4 Create nova-cal-voice/ in atlantis-labs Shane ⬜ POC
5 Throwaway test — pull :latest, capture digests Shane ⬜ POC
6 Pin Docker images with verified digests Shane ⬜ POC
7 Deploy docker-compose.voice.yml Shane + Jimmy ⬜ POC
8 Complete Cal v1.4 web setup (push-to-talk mode) Shane ⬜ POC
9 Wire squad status n8n webhook Shane + Ozzy ⬜ POC
10 Test full push-to-talk voice loop Shane ⬜ POC
11 Add voice.log to /atlantis-ops/logs/ Ozzy ⬜ POC
12 Draft HT-021: Nova-Cal Setup Jimmy ⬜ Post-vote
13 Draft SOP-011: Voice Assistant Operations Cooper ⬜ Post-vote
14 Push CB-002 v1.1 to Forgejo Shane ⬜ Tonight
15 Update V24 memory Ozzy ⬜ Tonight

V24 Memory Items (Log Tonight)

- CB-002 v1.1 — Nova Voice (Nova-Cal) — UNANIMOUSLY APPROVED WITH CONDITIONS
- Codename: Nova-Cal
- Stack: Cal v1.4 (CoreWorxLab) — pending source verification — + Groq Whisper V3 
  Turbo + Piper CPU TTS + n8n MCP
- Wyoming Protocol evaluated and rejected — Home Assistant lock-in
- Cal v1.4 selected for lab verification pending source/image validation (Mercy)
- RTX 3060 VRAM impact: zero — full CPU + Groq cloud offload
- Hardware: Trunks WSL2 POC first — dedicated Pi 4 after validation
- Groq STT: approved for non-sensitive lab commands only (Mercy condition)
- Input: push-to-talk Phase 1. Wake word Phase 2 after approval. Never always-listening.
- Docker images: :latest for throwaway test only — pin with digest for repeatable POC
- n8n: lab-scoped API key only — not production credentials
- SOP-008 language: "designed to support SOP-008 controls when configured correctly"
- Phase 1 commands (5 max): squad status, briefings, calendar, Nova status, memory update
- HT-021 + SOP-011 queued
- Mercy: 6 conditions all folded into v1.1
- Cooper: technically sound, zero VRAM, zero cost — no conditions

References

  • SOP-008 v0.4 — AI Production Risk Review
  • Nova Phase 3 Specification v1.0
  • RUNBOOK-Nova-Phase3-v1.1.md
  • Cal v1.4 — CoreWorxLab (January 2026) — pending verification
  • Groq Cloud: groq.com (Whisper V3 Turbo — free tier)
  • Piper TTS: github.com/rhasspy/piper
  • CIS Docker Benchmark v1.8.0
  • ATLANTIS_AI_MEMORY.md V23
  • updates.md May 20, 2026
  • CB-001 v4.2 — AI Communications Domain (companion brief)

CB-002 v1.1 — FINAL — compiled by Ozzy — May 20, 2026
7/7 council votes — unanimously approved with conditions
Store at: C:\AtlantisITS\knowledge\CB-002-Nova-Voice.md
Push to Forgejo: atlantis-docs/council/CB-002-Nova-Voice.md
POC gated on Mercy's 6 conditions — see No-Go Criteria