# nuvioindia-bit/myra-ai-voice-assistant architecture

> Architecture diagram of the GitHub repository nuvioindia-bit/myra-ai-voice-assistant, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nuvioindia-bit/myra-ai-voice-assistant
- Repository: https://github.com/nuvioindia-bit/myra-ai-voice-assistant

## Overview

MYRA is an Android voice assistant whose main interaction runs from the user through MainActivity: microphone audio is sent to Gemini Live, while recognized text can be parsed into commands and executed by the ViewModel. Settings configure the API key, voice, personality, and prime contacts. Separate services support wake-word activation, call monitoring, accessibility control, and the floating overlay. The graph covers the documented product branches, but several service and command implementations were not sampled; those connections are included only where the excerpts, source index, or README support them.

Main entry points: [`app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt) (Main Activity), [`app/src/main/java/com/myra/assistant/ai/GeminiLiveClient.kt`](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/GeminiLiveClient.kt) (Gemini Live Client), [`app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt`](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt) (Action ViewModel), [`app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt`](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt) (Settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_conversation["Voice Conversation"]
  node_audio["Audio Engine<br/>[AudioEngine.kt]"]
  node_gemini["Gemini Live Client"]
end

subgraph group_actions["Commands and Actions"]
  node_parser["Command Parser<br/>[CommandParser.kt]"]
  node_command["App Command<br/>[AppCommand.kt]"]
  node_viewmodel["Action ViewModel<br/>[MainViewModel.kt]"]
  node_accessibility["Accessibility Service"]
end

subgraph group_interface["App Interface"]
  node_main["Main Activity<br/>[MainActivity.kt]"]
  node_settings["Settings"]
  node_chat["Chat UI<br/>[UiComponents.kt]"]
  node_orb["Orb Animation"]
  node_messages["Chat Messages<br/>[ChatMessage.kt]"]
end

subgraph group_background["Background Services"]
  node_wake["Wake Word Service<br/>[WakeWordService.kt]"]
  node_calls["Call Monitor"]
  node_overlay["Floating Overlay"]
  node_power["Power Button Receiver"]
  node_boot["Boot Receiver<br/>[BootReceiver.kt]"]
end

node_user(("User"))
node_gemini_api{{"Gemini Live API"}}
node_phone{{"Phone and Apps"}}

node_user -->|"interacts"| node_main
node_main -->|"starts audio"| node_audio
node_audio -->|"sends chunks"| node_main
node_main -->|"connects"| node_gemini
node_main -->|"sends audio"| node_gemini
node_gemini -->|"WebSocket session"| node_gemini_api
node_main -->|"parses text"| node_parser
node_parser -->|"creates command"| node_command
node_main -->|"executes command"| node_viewmodel
node_viewmodel -->|"uses controls"| node_accessibility
node_viewmodel -->|"performs actions"| node_phone
node_settings -->|"checks status"| node_accessibility
node_settings -.->|"sets preferences"| node_gemini
node_main -->|"opens settings"| node_settings
node_main -.->|"displays chat"| node_chat
node_chat -->|"renders messages"| node_messages
node_main -->|"creates messages"| node_messages
node_wake -->|"activates assistant"| node_main
node_calls -->|"launches call UI"| node_main
node_user -->|"double presses"| node_power
node_power -.->|"shows overlay"| node_overlay
node_user -->|"uses floating orb"| node_overlay

click node_main "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt"
click node_settings "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt"
click node_chat "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/UiComponents.kt"
click node_orb "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/OrbAnimationView.kt"
click node_messages "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/model/ChatMessage.kt"
click node_audio "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/AudioEngine.kt"
click node_gemini "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/GeminiLiveClient.kt"
click node_parser "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/CommandParser.kt"
click node_command "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/model/AppCommand.kt"
click node_viewmodel "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt"
click node_accessibility "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/AccessibilityHelperService.kt"
click node_wake "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/Myra/app/src/main/java/com/myra/assistant/service/WakeWordService.kt"
click node_calls "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/CallMonitorService.kt"
click node_overlay "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/MyraOverlayService.kt"
click node_power "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/PowerButtonReceiver.kt"
click node_boot "https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/BootReceiver.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_audio,node_gemini,node_user toneBlue
class node_parser,node_command,node_viewmodel,node_accessibility toneAmber
class node_main,node_settings,node_chat,node_orb,node_messages,node_gemini_api toneMint
class node_wake,node_calls,node_overlay,node_power,node_boot toneRose
class node_phone toneIndigo
```

## Components

### Voice Conversation

- [Audio Engine](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/AudioEngine.kt): `app/src/main/java/com/myra/assistant/ai/AudioEngine.kt`
- [Gemini Live Client](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/GeminiLiveClient.kt): `app/src/main/java/com/myra/assistant/ai/GeminiLiveClient.kt`

### Commands and Actions

- [Command Parser](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ai/CommandParser.kt): `app/src/main/java/com/myra/assistant/ai/CommandParser.kt`
- [App Command](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/model/AppCommand.kt): `app/src/main/java/com/myra/assistant/model/AppCommand.kt`
- [Action ViewModel](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt): `app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt`
- [Accessibility Service](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/AccessibilityHelperService.kt): `app/src/main/java/com/myra/assistant/service/AccessibilityHelperService.kt`

### App Interface

- [Main Activity](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt): `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`
- [Settings](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt): `app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt`
- [Chat UI](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/UiComponents.kt): `app/src/main/java/com/myra/assistant/ui/main/UiComponents.kt`
- [Orb Animation](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/ui/main/OrbAnimationView.kt): `app/src/main/java/com/myra/assistant/ui/main/OrbAnimationView.kt`
- [Chat Messages](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/model/ChatMessage.kt): `app/src/main/java/com/myra/assistant/model/ChatMessage.kt`

### Background Services

- [Wake Word Service](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/Myra/app/src/main/java/com/myra/assistant/service/WakeWordService.kt): `Myra/app/src/main/java/com/myra/assistant/service/WakeWordService.kt`
- [Call Monitor](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/CallMonitorService.kt): `app/src/main/java/com/myra/assistant/service/CallMonitorService.kt`
- [Floating Overlay](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/MyraOverlayService.kt): `app/src/main/java/com/myra/assistant/service/MyraOverlayService.kt`
- [Power Button Receiver](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/PowerButtonReceiver.kt): `app/src/main/java/com/myra/assistant/service/PowerButtonReceiver.kt`
- [Boot Receiver](https://github.com/nuvioindia-bit/myra-ai-voice-assistant/blob/main/app/src/main/java/com/myra/assistant/service/BootReceiver.kt): `app/src/main/java/com/myra/assistant/service/BootReceiver.kt`

### Other components

- **User**
- **Gemini Live API**
- **Phone and Apps**

## Connections

- User → Main Activity: interacts (evidence: `README.md`)
- Main Activity → Audio Engine: starts audio (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Audio Engine → Main Activity: sends chunks (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Main Activity → Gemini Live Client: connects (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Main Activity → Gemini Live Client: sends audio (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Gemini Live Client → Gemini Live API: WebSocket session (evidence: `README.md`)
- Main Activity → Command Parser: parses text (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Command Parser → App Command: creates command (evidence: `app/src/main/java/com/myra/assistant/ai/CommandParser.kt`)
- Main Activity → Action ViewModel: executes command (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Action ViewModel → Accessibility Service: uses controls (evidence: `app/src/main/java/com/myra/assistant/viewmodel/MainViewModel.kt`)
- Action ViewModel → Phone and Apps: performs actions (evidence: `README.md`)
- Settings → Accessibility Service: checks status (evidence: `app/src/main/java/com/myra/assistant/ui/settings/SettingsActivity.kt`)
- Settings → Gemini Live Client: sets preferences
- Main Activity → Settings: opens settings (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Main Activity → Chat UI: displays chat
- Chat UI → Chat Messages: renders messages (evidence: `app/src/main/java/com/myra/assistant/ui/main/UiComponents.kt`)
- Main Activity → Chat Messages: creates messages (evidence: `app/src/main/java/com/myra/assistant/ui/main/MainActivity.kt`)
- Wake Word Service → Main Activity: activates assistant (evidence: `Myra/app/src/main/java/com/myra/assistant/service/WakeWordService.kt`)
- Call Monitor → Main Activity: launches call UI (evidence: `app/src/main/java/com/myra/assistant/service/CallMonitorService.kt`)
- User → Power Button Receiver: double presses (evidence: `README.md`)
- Power Button Receiver → Floating Overlay: shows overlay
- User → Floating Overlay: uses floating orb (evidence: `README.md`)
