The Problem
Slack gets noisy fast. Users drown in notifications, channels, threads. Cognitive debt builds from navigating interfaces manually to achieve every action.
The Solution
Vigour detaches the user from keyboard-and-mouse by converting authenticated voice intent into observable, permissioned Slack actions.
The user speaks to an animated avatar that floats over Slack, executes their intent via the Slack API, and shows every step in a live replay timeline. Destructive actions require a gesture confirmation (nod/smile via camera).
System Architecture
\
┌──────────────────┐
│ User (you) │ ← speaks + gestures + watches
└────┬──────┬──────┘
│ VOICE │ CAMERA
▼ ▼
┌─────────────────────────┐
│ Cortex (Python tray) │ ← wake word, ASR, TTS, face auth
│ ┌─────────┐ ┌───────┐ │
│ │ Porcupine│ │Whisper│ │
│ │ wake word│ │ ASR │ │
│ └─────────┘ └───────┘ │
│ ┌─────────┐ ┌───────┐ │
│ │ MediaPipe│ │ Piper │ │
│ │ face auth│ │ TTS │ │
│ └─────────┘ └───────┘ │
└──────┬──────────────────┘
│ local WebSocket (:9000)
▼
┌─────────────────────────┐
│ Vigour-App (Tauri) │ ← native overlay + avatar + timeline
│ ┌───────────────────┐ │
│ │ Canvas 2D Avatar │ │ ← state-driven animation
│ │ idle→listening→ │ │
│ │ thinking→exec→speak│ │
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Action Timeline │ │ ← live replay of every pipeline step
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Overlay Manager │ │ ← WS_EX_LAYERED + Slack window tracking
│ └───────────────────┘ │
└──────┬──────────────────┘
│ MCP (localhost:3002)
▼
┌─────────────────────────┐
│ Vigour-Core (Node) │ ← intent → policy → execute → audit
│ ┌───────────────────┐ │
│ │ MCP Server │ │ ← tools: summarize, send, broadcast, etc.
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Intent Parser │ │ ← LLM → JSON → Zod validate
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Policy Evaluator │ │ ← risk tiers + scope check
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Confirmation Gate │ │ ← allow/confirm/elevate/deny
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Slack API Layer │ │ ← 5 existing handlers
│ └───────────────────┘ │
└─────────────────────────┘
Phases
- Phase 0 — MCP-ify vigour-core (retrofit existing code to expose MCP tools)
- Phase 1 — Tauri native overlay window (tracking Slack desktop app)
- Phase 2 — Python voice agent (wake word + ASR + TTS + gestures)
- Phase 3 — Canvas 2D avatar with state-driven animation
- Phase 4 — Auth layer (voiceprint + face + liveness + lockout)
- Phase 5 — Production polish (cloud fallbacks, browser Slack, packaging)
Key Design Decisions
- The overlay is \WS_EX_LAYERED | WS_EX_TRANSPARENT\ — click-through, floats on Slack
- Toggle button switches Vigour mode ↔ Manual mode
- Voice + Visual are a coupled avatar; Presentation layer is the trust mechanism (action replay timeline)
- Offline-first for all voice/ML components; cloud fallbacks in Phase 5
- Slack desktop app only initially; browser support in Phase 5
The Problem
Slack gets noisy fast. Users drown in notifications, channels, threads. Cognitive debt builds from navigating interfaces manually to achieve every action.
The Solution
Vigour detaches the user from keyboard-and-mouse by converting authenticated voice intent into observable, permissioned Slack actions.
The user speaks to an animated avatar that floats over Slack, executes their intent via the Slack API, and shows every step in a live replay timeline. Destructive actions require a gesture confirmation (nod/smile via camera).
System Architecture
\
┌──────────────────┐
│ User (you) │ ← speaks + gestures + watches
└────┬──────┬──────┘
│ VOICE │ CAMERA
▼ ▼
┌─────────────────────────┐
│ Cortex (Python tray) │ ← wake word, ASR, TTS, face auth
│ ┌─────────┐ ┌───────┐ │
│ │ Porcupine│ │Whisper│ │
│ │ wake word│ │ ASR │ │
│ └─────────┘ └───────┘ │
│ ┌─────────┐ ┌───────┐ │
│ │ MediaPipe│ │ Piper │ │
│ │ face auth│ │ TTS │ │
│ └─────────┘ └───────┘ │
└──────┬──────────────────┘
│ local WebSocket (:9000)
▼
┌─────────────────────────┐
│ Vigour-App (Tauri) │ ← native overlay + avatar + timeline
│ ┌───────────────────┐ │
│ │ Canvas 2D Avatar │ │ ← state-driven animation
│ │ idle→listening→ │ │
│ │ thinking→exec→speak│ │
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Action Timeline │ │ ← live replay of every pipeline step
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Overlay Manager │ │ ← WS_EX_LAYERED + Slack window tracking
│ └───────────────────┘ │
└──────┬──────────────────┘
│ MCP (localhost:3002)
▼
┌─────────────────────────┐
│ Vigour-Core (Node) │ ← intent → policy → execute → audit
│ ┌───────────────────┐ │
│ │ MCP Server │ │ ← tools: summarize, send, broadcast, etc.
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Intent Parser │ │ ← LLM → JSON → Zod validate
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Policy Evaluator │ │ ← risk tiers + scope check
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Confirmation Gate │ │ ← allow/confirm/elevate/deny
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ Slack API Layer │ │ ← 5 existing handlers
│ └───────────────────┘ │
└─────────────────────────┘
Phases
Key Design Decisions