# flowshift-in/iris-ai architecture

> Architecture diagram of the GitHub repository flowshift-in/iris-ai, 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/flowshift-in/iris-ai
- Repository: https://github.com/flowshift-in/iris-ai

## Overview

IRIS is a voice-first desktop assistant; its README describes a voice-to-action loop through live AI, agent orchestration and protected tools. The public source shown here primarily implements the Electron shell and dashboard, not that private execution engine. The graph connects only relationships visible in excerpts or documented in the README; unsampled IPC receivers and core orchestration are not presented as inspected code.

Main entry points: [`src/renderer/src/UI/IRIS.tsx`](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/UI/IRIS.tsx) (Dashboard shell), [`src/renderer/src/views/Dashboard.tsx`](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Dashboard.tsx) (Command dashboard), [`src/preload/index.ts`](https://github.com/flowshift-in/iris-ai/blob/main/src/preload/index.ts) (Preload bridge), [`src/main/index.ts`](https://github.com/flowshift-in/iris-ai/blob/main/src/main/index.ts) (Electron window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop shell"]
  node_electron["Electron window<br/>[index.ts]"]
  node_preload["Preload bridge<br/>[index.ts]"]
  node_systeminfo["System app lookup<br/>[system-info.ts]"]
end

subgraph group_interface["Assistant interface"]
  node_renderer["Renderer entry<br/>[main.tsx]"]
  node_app["App root<br/>[App.tsx]"]
  node_root["Assistant root<br/>[IRISRoot.tsx]"]
  node_titlebar["Window controls<br/>[Titlebar.tsx]"]
  node_shell["Dashboard shell<br/>[IRIS.tsx]"]
end

subgraph group_workspace["Workspace features"]
  node_dashboard["Command dashboard<br/>[Dashboard.tsx]"]
  node_panels["Dashboard panels<br/>[LeftPanels.tsx]"]
  node_core["AI visualization<br/>[AICoreSphere.tsx]"]
  node_rightpanel["Right panel<br/>[RightPanel.tsx]"]
  node_apps["App catalog<br/>[APP.tsx]"]
  node_notes["Notes<br/>[Notes.tsx]"]
  node_gallery["Media gallery<br/>[Gallery.tsx]"]
  node_phone["Phone bridge UI<br/>[Phone.tsx]"]
  node_settings["Settings<br/>[Settings.tsx]"]
end

subgraph group_execution["Voice execution"]
  node_gemini["Gemini Live API"]
  node_agent["Agent orchestration"]
  node_tools["Protected tools"]
  node_system["Desktop actions"]
end

node_user(("User"))

node_user -->|"opens"| node_electron
node_electron -->|"loads"| node_preload
node_electron -->|"loads"| node_renderer
node_renderer -->|"renders"| node_app
node_app -->|"renders"| node_root
node_root -->|"renders"| node_titlebar
node_root -->|"renders"| node_shell
node_shell -->|"renders"| node_dashboard
node_shell -->|"loads"| node_notes
node_shell -->|"loads"| node_gallery
node_shell -->|"renders"| node_phone
node_shell -->|"renders"| node_settings
node_dashboard -->|"renders"| node_panels
node_dashboard -->|"renders"| node_core
node_dashboard -->|"renders"| node_rightpanel
node_apps -->|"lists apps"| node_systeminfo
node_apps -.->|"invokes IPC"| node_preload
node_notes -.->|"invokes IPC"| node_preload
node_phone -.->|"invokes IPC"| node_preload
node_user -->|"speaks"| node_gemini
node_gemini -->|"recognizes intent"| node_agent
node_agent -->|"selects tools"| node_tools
node_tools -->|"executes actions"| node_system
node_system -->|"streams results"| node_user

click node_electron "https://github.com/flowshift-in/iris-ai/blob/main/src/main/index.ts"
click node_preload "https://github.com/flowshift-in/iris-ai/blob/main/src/preload/index.ts"
click node_renderer "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/main.tsx"
click node_app "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/App.tsx"
click node_root "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/IRISRoot.tsx"
click node_titlebar "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/Titlebar.tsx"
click node_shell "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/UI/IRIS.tsx"
click node_dashboard "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Dashboard.tsx"
click node_panels "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/LeftPanels.tsx"
click node_core "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/AICoreSphere.tsx"
click node_rightpanel "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/RightPanel.tsx"
click node_apps "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/APP.tsx"
click node_systeminfo "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/services/system-info.ts"
click node_notes "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Notes.tsx"
click node_gallery "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Gallery.tsx"
click node_phone "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Phone.tsx"
click node_settings "https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Settings.tsx"

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_electron,node_preload,node_systeminfo,node_user toneBlue
class node_renderer,node_app,node_root,node_titlebar,node_shell toneAmber
class node_dashboard,node_panels,node_core,node_rightpanel,node_apps,node_notes,node_gallery,node_phone,node_settings toneMint
class node_gemini,node_agent,node_tools,node_system toneRose
```

## Components

### Desktop shell

- [Electron window](https://github.com/flowshift-in/iris-ai/blob/main/src/main/index.ts): `src/main/index.ts`
- [Preload bridge](https://github.com/flowshift-in/iris-ai/blob/main/src/preload/index.ts): `src/preload/index.ts`
- [System app lookup](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/services/system-info.ts): `src/renderer/src/services/system-info.ts`

### Assistant interface

- [Renderer entry](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/main.tsx): `src/renderer/src/main.tsx`
- [App root](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/App.tsx): `src/renderer/src/App.tsx`
- [Assistant root](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/IRISRoot.tsx): `src/renderer/src/IRISRoot.tsx`
- [Window controls](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/Titlebar.tsx): `src/renderer/src/components/Titlebar.tsx`
- [Dashboard shell](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/UI/IRIS.tsx): `src/renderer/src/UI/IRIS.tsx`

### Workspace features

- [Command dashboard](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Dashboard.tsx): `src/renderer/src/views/Dashboard.tsx`
- [Dashboard panels](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/LeftPanels.tsx): `src/renderer/src/components/UI/LeftPanels.tsx`
- [AI visualization](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/AICoreSphere.tsx): `src/renderer/src/components/UI/AICoreSphere.tsx`
- [Right panel](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/components/UI/RightPanel.tsx): `src/renderer/src/components/UI/RightPanel.tsx`
- [App catalog](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/APP.tsx): `src/renderer/src/views/APP.tsx`
- [Notes](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Notes.tsx): `src/renderer/src/views/Notes.tsx`
- [Media gallery](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Gallery.tsx): `src/renderer/src/views/Gallery.tsx`
- [Phone bridge UI](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Phone.tsx): `src/renderer/src/views/Phone.tsx`
- [Settings](https://github.com/flowshift-in/iris-ai/blob/main/src/renderer/src/views/Settings.tsx): `src/renderer/src/views/Settings.tsx`

### Voice execution

- **Gemini Live API**
- **Agent orchestration**
- **Protected tools**
- **Desktop actions**

### Other components

- **User**

## Connections

- User → Electron window: opens (evidence: `src/main/index.ts`)
- Electron window → Preload bridge: loads (evidence: `src/main/index.ts`)
- Electron window → Renderer entry: loads (evidence: `src/main/index.ts`)
- Renderer entry → App root: renders (evidence: `src/renderer/src/main.tsx`)
- App root → Assistant root: renders (evidence: `src/renderer/src/App.tsx`)
- Assistant root → Window controls: renders (evidence: `src/renderer/src/IRISRoot.tsx`)
- Assistant root → Dashboard shell: renders (evidence: `src/renderer/src/IRISRoot.tsx`)
- Dashboard shell → Command dashboard: renders (evidence: `src/renderer/src/UI/IRIS.tsx`)
- Dashboard shell → Notes: loads (evidence: `src/renderer/src/UI/IRIS.tsx`)
- Dashboard shell → Media gallery: loads (evidence: `src/renderer/src/UI/IRIS.tsx`)
- Dashboard shell → Phone bridge UI: renders (evidence: `src/renderer/src/UI/IRIS.tsx`)
- Dashboard shell → Settings: renders (evidence: `src/renderer/src/UI/IRIS.tsx`)
- Command dashboard → Dashboard panels: renders (evidence: `src/renderer/src/views/Dashboard.tsx`)
- Command dashboard → AI visualization: renders (evidence: `src/renderer/src/views/Dashboard.tsx`)
- Command dashboard → Right panel: renders (evidence: `src/renderer/src/views/Dashboard.tsx`)
- App catalog → System app lookup: lists apps (evidence: `src/renderer/src/views/APP.tsx`)
- App catalog → Preload bridge: invokes IPC (evidence: `src/renderer/src/views/APP.tsx`)
- Notes → Preload bridge: invokes IPC (evidence: `src/renderer/src/views/Notes.tsx`)
- Phone bridge UI → Preload bridge: invokes IPC (evidence: `src/renderer/src/views/Phone.tsx`)
- User → Gemini Live API: speaks (evidence: `README.md`)
- Gemini Live API → Agent orchestration: recognizes intent (evidence: `README.md`)
- Agent orchestration → Protected tools: selects tools (evidence: `README.md`)
- Protected tools → Desktop actions: executes actions (evidence: `README.md`)
- Desktop actions → User: streams results (evidence: `README.md`)
