# composio-community/open-dot architecture

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

- Interactive diagram: https://gitdiagram.com/composio-community/open-dot
- Repository: https://github.com/composio-community/open-dot

## Overview

Open Dot is a local-first desktop app for creating persistent personal agents (“dots”). Users configure a dot, send it work in chat, and follow its progress or take over its computer; the agent can use tools, request approval for risky actions, and retain chat and dot data. Separate capabilities include connected-app actions, scheduled routines, event triggers, voice, password vaulting, and multi-dot channels. Relationships below follow sampled imports, excerpts, and README statements; unsampled subsystem internals are represented at their documented paths.

Main entry points: [`src/app/actions.ts`](https://github.com/composio-community/open-dot/blob/main/src/app/actions.ts) (Server actions), [`src/server/agent/runtime.ts`](https://github.com/composio-community/open-dot/blob/main/src/server/agent/runtime.ts) (Agent loop), [`src/server/repo.ts`](https://github.com/composio-community/open-dot/blob/main/src/server/repo.ts) (Dot and chat data), [`src/server/agent/client.ts`](https://github.com/composio-community/open-dot/blob/main/src/server/agent/client.ts) (Model client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interface"]
  node_chat["Chat<br/>[Chat.tsx]"]
  node_settings["Settings<br/>[SettingsView.tsx]"]
  node_app_actions["Server actions<br/>[actions.ts]"]
  node_event_api["Live events API<br/>[route.ts]"]
  node_client_store["Client state<br/>[store.ts]"]
end

subgraph group_agent["Agent runtime"]
  node_runtime["Agent loop<br/>[runtime.ts]"]
  node_tools["Agent tools<br/>[tools.ts]"]
  node_review["Action review<br/>[review.ts]"]
  node_model_client["Model client<br/>[client.ts]"]
  node_openrouter["OpenRouter models<br/>[openrouter.ts]"]
end

subgraph group_computer["Dot computers"]
  node_computer_api["Computer interface<br/>[index.ts]"]
  node_browser["Dot browser<br/>[browser.ts]"]
  node_cloud_computer["Cloud computer<br/>[cloud.ts]"]
end

subgraph group_integrations["Apps and automation"]
  node_composio["Connected apps<br/>[composio.ts]"]
  node_triggers["App triggers<br/>[triggers.ts]"]
  node_scheduler["Routines<br/>[scheduler.ts]"]
  node_voice["Voice calls<br/>[voice.ts]"]
end

subgraph group_data["State and services"]
  node_vault["Password vault<br/>[vault.ts]"]
  node_repo["Dot and chat data<br/>[repo.ts]"]
  node_database[("SQLite<br/>[db.ts]")]
  node_event_bus["Event bus<br/>[bus.ts]"]
  node_snapshot["Initial snapshot<br/>[snapshot.ts]"]
end

node_user(("User"))

node_user -->|"sends work"| node_chat
node_user -->|"configures"| node_settings
node_chat -->|"invokes"| node_app_actions
node_settings -->|"invokes"| node_app_actions
node_app_actions -->|"starts runs"| node_runtime
node_runtime -.->|"requests model"| node_model_client
node_model_client -->|"selects open models"| node_openrouter
node_runtime -.->|"dispatches tools"| node_tools
node_runtime -.->|"checks actions"| node_review
node_tools -.->|"uses app tools"| node_composio
node_tools -.->|"uses computer"| node_computer_api
node_computer_api -->|"delegates browser"| node_browser
node_computer_api -->|"delegates cloud"| node_cloud_computer
node_app_actions -->|"updates data"| node_repo
node_app_actions -->|"connects apps"| node_composio
node_app_actions -->|"saves passwords"| node_vault
node_app_actions -->|"manages triggers"| node_triggers
node_triggers -.->|"wakes dot"| node_runtime
node_scheduler -.->|"runs routine"| node_runtime
node_voice -.->|"continues work"| node_runtime
node_repo -->|"reads and writes"| node_database
node_vault -->|"stores encrypted passwords"| node_repo
node_model_client -->|"reads settings"| node_database
node_model_client -->|"unseals keys"| node_vault
node_repo -->|"emits updates"| node_event_bus
node_app_actions -->|"emits updates"| node_event_bus
node_event_api -->|"subscribes"| node_event_bus
node_event_api -->|"sends initial state"| node_snapshot
node_client_store -.->|"receives stream"| node_event_api
node_snapshot -->|"loads dot state"| node_repo
node_snapshot -->|"loads app status"| node_composio
node_snapshot -->|"loads trigger status"| node_triggers

click node_chat "https://github.com/composio-community/open-dot/blob/main/src/components/Chat.tsx"
click node_settings "https://github.com/composio-community/open-dot/blob/main/src/components/SettingsView.tsx"
click node_app_actions "https://github.com/composio-community/open-dot/blob/main/src/app/actions.ts"
click node_event_api "https://github.com/composio-community/open-dot/blob/main/src/app/api/events/route.ts"
click node_client_store "https://github.com/composio-community/open-dot/blob/main/src/lib/store.ts"
click node_runtime "https://github.com/composio-community/open-dot/blob/main/src/server/agent/runtime.ts"
click node_tools "https://github.com/composio-community/open-dot/blob/main/src/server/agent/tools.ts"
click node_review "https://github.com/composio-community/open-dot/blob/main/src/server/agent/review.ts"
click node_model_client "https://github.com/composio-community/open-dot/blob/main/src/server/agent/client.ts"
click node_openrouter "https://github.com/composio-community/open-dot/blob/main/src/server/agent/openrouter.ts"
click node_computer_api "https://github.com/composio-community/open-dot/blob/main/src/server/computer/index.ts"
click node_browser "https://github.com/composio-community/open-dot/blob/main/src/server/computer/browser.ts"
click node_cloud_computer "https://github.com/composio-community/open-dot/blob/main/src/server/computer/cloud.ts"
click node_composio "https://github.com/composio-community/open-dot/blob/main/src/server/composio.ts"
click node_triggers "https://github.com/composio-community/open-dot/blob/main/src/server/triggers.ts"
click node_scheduler "https://github.com/composio-community/open-dot/blob/main/src/server/scheduler.ts"
click node_voice "https://github.com/composio-community/open-dot/blob/main/src/server/voice.ts"
click node_vault "https://github.com/composio-community/open-dot/blob/main/src/server/vault.ts"
click node_repo "https://github.com/composio-community/open-dot/blob/main/src/server/repo.ts"
click node_database "https://github.com/composio-community/open-dot/blob/main/src/server/db.ts"
click node_event_bus "https://github.com/composio-community/open-dot/blob/main/src/server/bus.ts"
click node_snapshot "https://github.com/composio-community/open-dot/blob/main/src/server/snapshot.ts"

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_chat,node_settings,node_app_actions,node_event_api,node_client_store,node_user toneBlue
class node_runtime,node_tools,node_review,node_model_client,node_openrouter toneAmber
class node_computer_api,node_browser,node_cloud_computer toneMint
class node_composio,node_triggers,node_scheduler,node_voice toneRose
class node_vault,node_repo,node_database,node_event_bus,node_snapshot toneIndigo
```

## Components

### User interface

- [Chat](https://github.com/composio-community/open-dot/blob/main/src/components/Chat.tsx): `src/components/Chat.tsx`
- [Settings](https://github.com/composio-community/open-dot/blob/main/src/components/SettingsView.tsx): `src/components/SettingsView.tsx`
- [Server actions](https://github.com/composio-community/open-dot/blob/main/src/app/actions.ts): `src/app/actions.ts`
- [Live events API](https://github.com/composio-community/open-dot/blob/main/src/app/api/events/route.ts): `src/app/api/events/route.ts`
- [Client state](https://github.com/composio-community/open-dot/blob/main/src/lib/store.ts): `src/lib/store.ts`

### Agent runtime

- [Agent loop](https://github.com/composio-community/open-dot/blob/main/src/server/agent/runtime.ts): `src/server/agent/runtime.ts`
- [Agent tools](https://github.com/composio-community/open-dot/blob/main/src/server/agent/tools.ts): `src/server/agent/tools.ts`
- [Action review](https://github.com/composio-community/open-dot/blob/main/src/server/agent/review.ts): `src/server/agent/review.ts`
- [Model client](https://github.com/composio-community/open-dot/blob/main/src/server/agent/client.ts): `src/server/agent/client.ts`
- [OpenRouter models](https://github.com/composio-community/open-dot/blob/main/src/server/agent/openrouter.ts): `src/server/agent/openrouter.ts`

### Dot computers

- [Computer interface](https://github.com/composio-community/open-dot/blob/main/src/server/computer/index.ts): `src/server/computer/index.ts`
- [Dot browser](https://github.com/composio-community/open-dot/blob/main/src/server/computer/browser.ts): `src/server/computer/browser.ts`
- [Cloud computer](https://github.com/composio-community/open-dot/blob/main/src/server/computer/cloud.ts): `src/server/computer/cloud.ts`

### Apps and automation

- [Connected apps](https://github.com/composio-community/open-dot/blob/main/src/server/composio.ts): `src/server/composio.ts`
- [App triggers](https://github.com/composio-community/open-dot/blob/main/src/server/triggers.ts): `src/server/triggers.ts`
- [Routines](https://github.com/composio-community/open-dot/blob/main/src/server/scheduler.ts): `src/server/scheduler.ts`
- [Voice calls](https://github.com/composio-community/open-dot/blob/main/src/server/voice.ts): `src/server/voice.ts`

### State and services

- [Password vault](https://github.com/composio-community/open-dot/blob/main/src/server/vault.ts): `src/server/vault.ts`
- [Dot and chat data](https://github.com/composio-community/open-dot/blob/main/src/server/repo.ts): `src/server/repo.ts`
- [SQLite](https://github.com/composio-community/open-dot/blob/main/src/server/db.ts): `src/server/db.ts`
- [Event bus](https://github.com/composio-community/open-dot/blob/main/src/server/bus.ts): `src/server/bus.ts`
- [Initial snapshot](https://github.com/composio-community/open-dot/blob/main/src/server/snapshot.ts): `src/server/snapshot.ts`

### Other components

- **User**

## Connections

- User → Chat: sends work
- User → Settings: configures
- Chat → Server actions: invokes (evidence: `src/components/Chat.tsx`)
- Settings → Server actions: invokes (evidence: `src/components/SettingsView.tsx`)
- Server actions → Agent loop: starts runs (evidence: `src/app/actions.ts`)
- Agent loop → Model client: requests model
- Model client → OpenRouter models: selects open models (evidence: `src/server/agent/client.ts`)
- Agent loop → Agent tools: dispatches tools
- Agent loop → Action review: checks actions
- Agent tools → Connected apps: uses app tools
- Agent tools → Computer interface: uses computer
- Computer interface → Dot browser: delegates browser (evidence: `src/server/computer/index.ts`)
- Computer interface → Cloud computer: delegates cloud (evidence: `src/server/computer/index.ts`)
- Server actions → Dot and chat data: updates data (evidence: `src/app/actions.ts`)
- Server actions → Connected apps: connects apps (evidence: `src/app/actions.ts`)
- Server actions → Password vault: saves passwords (evidence: `src/app/actions.ts`)
- Server actions → App triggers: manages triggers (evidence: `src/app/actions.ts`)
- App triggers → Agent loop: wakes dot
- Routines → Agent loop: runs routine
- Voice calls → Agent loop: continues work
- Dot and chat data → SQLite: reads and writes (evidence: `src/server/repo.ts`)
- Password vault → Dot and chat data: stores encrypted passwords (evidence: `src/server/vault.ts`)
- Model client → SQLite: reads settings (evidence: `src/server/agent/client.ts`)
- Model client → Password vault: unseals keys (evidence: `src/server/agent/client.ts`)
- Dot and chat data → Event bus: emits updates (evidence: `src/server/repo.ts`)
- Server actions → Event bus: emits updates (evidence: `src/app/actions.ts`)
- Live events API → Event bus: subscribes (evidence: `src/app/api/events/route.ts`)
- Live events API → Initial snapshot: sends initial state (evidence: `src/app/api/events/route.ts`)
- Client state → Live events API: receives stream
- Initial snapshot → Dot and chat data: loads dot state (evidence: `src/server/snapshot.ts`)
- Initial snapshot → Connected apps: loads app status (evidence: `src/server/snapshot.ts`)
- Initial snapshot → App triggers: loads trigger status (evidence: `src/server/snapshot.ts`)
