# tsmemo/notes-jarvis architecture

> Architecture diagram of the GitHub repository tsmemo/notes-jarvis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tsmemo/notes-jarvis
- Repository: https://github.com/tsmemo/notes-jarvis

## Overview

Notes Jarvis is an Android digital note assistant. Its main user workflow is capturing a note or voice idea, turning it into knowledge, then using that knowledge for search or structured decision support; agents and profile-aware pushes provide proactive assistance. The graph also preserves the documented agent, profile, and offline/online AI capabilities. UI and several subsystems are represented from the README and tree; only the sampled implementation excerpts support the detailed call edges shown.

Main entry points: [`app/src/main/java/com/notesjarvis/app/core/decision/DecisionEngine.kt`](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/decision/DecisionEngine.kt) (Decision analysis), [`app/src/main/java/com/notesjarvis/app/core/push/PushEngine.kt`](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/push/PushEngine.kt) (Proactive push), [`app/src/main/java/com/notesjarvis/app/data/repository/KnowledgeRepository.kt`](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/KnowledgeRepository.kt) (Knowledge repository), [`app/src/main/java/com/notesjarvis/app/data/repository/ProfileRepository.kt`](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/ProfileRepository.kt) (Profile repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App and UI"]
  node_activity["Android entry<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[NavGraph.kt]"]
  node_inspiration_ui["Inspiration UI"]
  node_decision_ui["Decision UI<br/>[DecisionScreen.kt]"]
  node_knowledge_ui["Knowledge UI<br/>[KnowledgeScreen.kt]"]
  node_profile_ui["Profile UI<br/>[ProfileScreen.kt]"]
end

subgraph group_knowledge["Knowledge and storage"]
  node_capture["Idea capture"]
  node_voice_capture["Voice capture"]
  node_knowledge_repo["Knowledge repository"]
  node_database[("Room database<br/>[JarvisDatabase.kt]")]
  node_embedding["Embedding index"]
end

subgraph group_intelligence["AI and decisions"]
  node_decision["Decision analysis<br/>[DecisionEngine.kt]"]
  node_decision_repo["Decision repository"]
  node_ai["AI engine<br/>[AiEngine.kt]"]
  node_local_llm["Local model<br/>[LocalLlmEngine.kt]"]
  node_profile["User profile"]
  node_profile_repo["Profile repository"]
end

subgraph group_assistant["Proactive assistant"]
  node_voice_service["Voice assistant"]
  node_agents["Agent scheduler<br/>[AgentScheduler.kt]"]
  node_agent_worker["Background worker"]
  node_push["Proactive push<br/>[PushEngine.kt]"]
  node_notifications["Notifications"]
end

node_user(("User"))
node_cloud(("Cloud model"))

node_user -->|"opens app"| node_activity
node_activity -->|"starts navigation"| node_navigation
node_user -->|"captures idea"| node_inspiration_ui
node_user -->|"asks decision"| node_decision_ui
node_user -->|"searches knowledge"| node_knowledge_ui
node_user -->|"views profile"| node_profile_ui
node_voice_service -->|"starts capture"| node_capture
node_voice_capture -->|"supplies speech"| node_voice_service
node_decision -->|"searches knowledge"| node_knowledge_repo
node_decision -->|"loads history"| node_decision_repo
node_decision -->|"loads profile"| node_profile_repo
node_decision -->|"analyzes request"| node_ai
node_ai -->|"routes locally"| node_local_llm
node_local_llm -.->|"uses online model"| node_cloud
node_profile -->|"reads and saves"| node_profile_repo
node_agents -->|"schedules work"| node_agent_worker
node_push -->|"reads counts"| node_knowledge_repo
node_push -->|"reads interests"| node_profile_repo
node_push -->|"shows notification"| node_notifications
node_knowledge_repo -->|"reads and writes"| node_database
node_embedding -->|"stores vectors"| node_database

click node_activity "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/MainActivity.kt"
click node_navigation "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/NavGraph.kt"
click node_inspiration_ui "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/inspiration/InspirationScreen.kt"
click node_decision_ui "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/decision/DecisionScreen.kt"
click node_knowledge_ui "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/knowledge/KnowledgeScreen.kt"
click node_profile_ui "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/profile/ProfileScreen.kt"
click node_capture "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/inspiration/InspirationOrchestrator.kt"
click node_voice_capture "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/inspiration/VoiceCaptureEngine.kt"
click node_voice_service "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/voice/VoiceAssistantService.kt"
click node_knowledge_repo "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/KnowledgeRepository.kt"
click node_database "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/local/JarvisDatabase.kt"
click node_embedding "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/local/KnowledgeEmbeddingService.kt"
click node_decision "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/decision/DecisionEngine.kt"
click node_decision_repo "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/DecisionRepository.kt"
click node_ai "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/ai/AiEngine.kt"
click node_local_llm "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/ai/LocalLlmEngine.kt"
click node_profile "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/profile/UserProfileEngine.kt"
click node_profile_repo "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/ProfileRepository.kt"
click node_agents "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/agent/AgentScheduler.kt"
click node_agent_worker "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/agent/JarvisAgentWorker.kt"
click node_push "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/push/PushEngine.kt"
click node_notifications "https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/notification/JarvisNotificationManager.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_activity,node_navigation,node_inspiration_ui,node_decision_ui,node_knowledge_ui,node_profile_ui,node_user toneBlue
class node_capture,node_voice_capture,node_knowledge_repo,node_database,node_embedding toneAmber
class node_decision,node_decision_repo,node_ai,node_local_llm,node_profile,node_profile_repo toneMint
class node_voice_service,node_agents,node_agent_worker,node_push,node_notifications toneRose
class node_cloud toneIndigo
```

## Components

### App and UI

- [Android entry](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/MainActivity.kt): `app/src/main/java/com/notesjarvis/app/MainActivity.kt`
- [App navigation](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/NavGraph.kt): `app/src/main/java/com/notesjarvis/app/ui/NavGraph.kt`
- [Inspiration UI](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/inspiration/InspirationScreen.kt): `app/src/main/java/com/notesjarvis/app/ui/inspiration/InspirationScreen.kt`
- [Decision UI](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/decision/DecisionScreen.kt): `app/src/main/java/com/notesjarvis/app/ui/decision/DecisionScreen.kt`
- [Knowledge UI](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/knowledge/KnowledgeScreen.kt): `app/src/main/java/com/notesjarvis/app/ui/knowledge/KnowledgeScreen.kt`
- [Profile UI](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/ui/profile/ProfileScreen.kt): `app/src/main/java/com/notesjarvis/app/ui/profile/ProfileScreen.kt`

### Knowledge and storage

- [Idea capture](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/inspiration/InspirationOrchestrator.kt): `app/src/main/java/com/notesjarvis/app/core/inspiration/InspirationOrchestrator.kt`
- [Voice capture](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/inspiration/VoiceCaptureEngine.kt): `app/src/main/java/com/notesjarvis/app/core/inspiration/VoiceCaptureEngine.kt`
- [Knowledge repository](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/KnowledgeRepository.kt): `app/src/main/java/com/notesjarvis/app/data/repository/KnowledgeRepository.kt`
- [Room database](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/local/JarvisDatabase.kt): `app/src/main/java/com/notesjarvis/app/data/local/JarvisDatabase.kt`
- [Embedding index](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/local/KnowledgeEmbeddingService.kt): `app/src/main/java/com/notesjarvis/app/data/local/KnowledgeEmbeddingService.kt`

### AI and decisions

- [Decision analysis](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/decision/DecisionEngine.kt): `app/src/main/java/com/notesjarvis/app/core/decision/DecisionEngine.kt`
- [Decision repository](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/DecisionRepository.kt): `app/src/main/java/com/notesjarvis/app/data/repository/DecisionRepository.kt`
- [AI engine](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/ai/AiEngine.kt): `app/src/main/java/com/notesjarvis/app/core/ai/AiEngine.kt`
- [Local model](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/ai/LocalLlmEngine.kt): `app/src/main/java/com/notesjarvis/app/core/ai/LocalLlmEngine.kt`
- [User profile](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/profile/UserProfileEngine.kt): `app/src/main/java/com/notesjarvis/app/core/profile/UserProfileEngine.kt`
- [Profile repository](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/data/repository/ProfileRepository.kt): `app/src/main/java/com/notesjarvis/app/data/repository/ProfileRepository.kt`

### Proactive assistant

- [Voice assistant](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/voice/VoiceAssistantService.kt): `app/src/main/java/com/notesjarvis/app/core/voice/VoiceAssistantService.kt`
- [Agent scheduler](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/agent/AgentScheduler.kt): `app/src/main/java/com/notesjarvis/app/core/agent/AgentScheduler.kt`
- [Background worker](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/agent/JarvisAgentWorker.kt): `app/src/main/java/com/notesjarvis/app/core/agent/JarvisAgentWorker.kt`
- [Proactive push](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/core/push/PushEngine.kt): `app/src/main/java/com/notesjarvis/app/core/push/PushEngine.kt`
- [Notifications](https://github.com/tsmemo/notes-jarvis/blob/clean-main/app/src/main/java/com/notesjarvis/app/notification/JarvisNotificationManager.kt): `app/src/main/java/com/notesjarvis/app/notification/JarvisNotificationManager.kt`

### Other components

- **User**
- **Cloud model**

## Connections

- User → Android entry: opens app
- Android entry → App navigation: starts navigation
- User → Inspiration UI: captures idea
- User → Decision UI: asks decision
- User → Knowledge UI: searches knowledge
- User → Profile UI: views profile
- Voice assistant → Idea capture: starts capture
- Voice capture → Voice assistant: supplies speech
- Decision analysis → Knowledge repository: searches knowledge
- Decision analysis → Decision repository: loads history
- Decision analysis → Profile repository: loads profile
- Decision analysis → AI engine: analyzes request
- AI engine → Local model: routes locally
- Local model → Cloud model: uses online model
- User profile → Profile repository: reads and saves
- Agent scheduler → Background worker: schedules work
- Proactive push → Knowledge repository: reads counts
- Proactive push → Profile repository: reads interests
- Proactive push → Notifications: shows notification
- Knowledge repository → Room database: reads and writes
- Embedding index → Room database: stores vectors
