How kaioh17/ekko works
EKKO is a local-first voice assistant with a desktop control UI. Its documented voice workflow gates command handling through speech detection, wake-word recognition, speaker verification, transcription, closed-set intent matching, and execution; ambiguous requests can use an LLM fallback, with spoken responses. The UI exposes chat, memory, routing, settings, status, and reports through a local authenticated API. Several runtime stages and UI capabilities are documented by the README or tree but their implementation was not sampled, so links are limited to documented behavior and directly evidenced calls.
Main entry points: route.py Route coordination · routers API routes · main.py Authenticated API · App.tsx Desktop app
Components 22
Voice assistant
- Speech detection
listener/vad_listener.py - Wake-word check
listener/vad_listener.py - Speaker verification
voice_auth/verify.py - Transcription
listener/vad_listener.py - Spoken feedback
feedback/speech.py
Intent routing
- Intent matching
routing/matcher.py - Route coordination
routing/route.py - Command execution
routing/execute.py - LLM fallback
llm_fallback - Routing configuration
routing/config.py - Domain registry
routing/domains.py
API services
- Assistant memory
memory - Authenticated API
backend/main.py - API routes
backend/routers - Status events
backend/status_bus.py - Assistant settings
backend/routers/settings.py
Desktop UI
- Desktop app
ekko-ui/src/App.tsx - API client
ekko-ui/src/api/client.ts - Control panels
ekko-ui/src/components/panels
External services
- Gemini API
Other components
- Owner
- Microphone
Connections 22
- Owner → Microphone: speaks to
- Microphone → Speech detection: audio input
- Speech detection → Wake-word check: speech detected
- Wake-word check → Speaker verification: wake matches
- Speaker verification → Transcription: speaker confirmed
- Transcription → Route coordination: transcribed command
- Route coordination → Intent matching: checks intent
- Intent matching → Routing configuration: reads intents
- Route coordination → Command execution: dispatches match
- Route coordination → LLM fallback: handles no-match
- LLM fallback → Gemini API: requests completion
- Route coordination → Spoken feedback: provides response
- Owner → Desktop app: uses
- Desktop app → Control panels: renders panels
- Desktop app → API client: invokes requests
- API client → Authenticated API: HTTP requests
- Authenticated API → API routes: dispatches routes
- API routes → Routing configuration: loads intents
- API routes → Domain registry: loads domains
- API routes → Assistant settings: serves settings
- API routes → Assistant memory: reads and updates
- Authenticated API → Status events: publishes status