# peakflo/20x architecture

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

- Interactive diagram: https://gitdiagram.com/peakflo/20x
- Repository: https://github.com/peakflo/20x

## Overview

20x is a local-first Electron task manager that routes work from a desktop or paired mobile client to coding agents. The main workflow is task intake and selection, agent execution in an isolated repository workspace, live review and approval, then task/result updates and feedback. The README also documents task-source integrations, skills, MCP tools, artifacts, voice, and heartbeat monitoring. The graph follows documented flows and sampled boundaries; several subsystem links are based on README capabilities because their implementation was not sampled.

Main entry points: [`src/main/agent-manager.ts`](https://github.com/peakflo/20x/blob/main/src/main/agent-manager.ts) (Agent manager), [`src/main/database.ts`](https://github.com/peakflo/20x/blob/main/src/main/database.ts) (SQLite database), [`src/main/mobile-api-server.ts`](https://github.com/peakflo/20x/blob/main/src/main/mobile-api-server.ts) (Mobile API), [`src/renderer/src/App.tsx`](https://github.com/peakflo/20x/blob/main/src/renderer/src/App.tsx) (Desktop UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_desktop["Desktop UI<br/>[App.tsx]"]
  node_mobile["Mobile client<br/>[App.tsx]"]
  node_taskui["Task management<br/>[TaskWorkspace.tsx]"]
end

subgraph group_runtime["Desktop runtime"]
  node_bridge["Preload bridge<br/>[index.ts]"]
  node_ipc["IPC handlers<br/>[ipc-handlers.ts]"]
  node_mobileapi["Mobile API"]
  node_db[("SQLite database<br/>[database.ts]")]
end

subgraph group_work["Task execution"]
  node_orchestrator["Agent manager<br/>[agent-manager.ts]"]
  node_adapters["Agent adapters<br/>[index.ts]"]
  node_workspace["Git worktrees"]
  node_skills["Skills and plugins"]
  node_mcp["MCP tools<br/>[mcp-tool-caller.ts]"]
  node_scheduler["Task schedulers"]
end

subgraph group_integrations["Integrations"]
  node_sources["Task integrations<br/>[registry.ts]"]
  node_oauth["OAuth manager<br/>[oauth-manager.ts]"]
end

subgraph group_support["Local capabilities"]
  node_artifacts["Artifacts<br/>[artifacts.ts]"]
  node_voice["Voice sessions"]
  node_heartbeat["Heartbeat sync"]
end

node_user(("User"))
node_agents{{"Coding agents"}}

node_user -->|"creates tasks"| node_desktop
node_desktop -->|"manages tasks"| node_taskui
node_taskui -->|"invokes IPC"| node_bridge
node_bridge -->|"dispatches calls"| node_ipc
node_ipc -->|"reads and writes"| node_db
node_ipc -->|"controls sessions"| node_orchestrator
node_sources -->|"syncs task data"| node_db
node_oauth -->|"stores tokens"| node_db
node_orchestrator -->|"loads task state"| node_db
node_orchestrator -->|"prepares worktrees"| node_workspace
node_orchestrator -->|"loads instructions"| node_skills
node_orchestrator -->|"calls tools"| node_mcp
node_orchestrator -->|"selects adapter"| node_adapters
node_adapters -->|"runs sessions"| node_agents
node_orchestrator -->|"saves outcomes"| node_db
node_scheduler -->|"schedules tasks"| node_db
node_mobile -->|"requests task data"| node_mobileapi
node_mobileapi -->|"reads and writes"| node_db
node_mobile -->|"starts sessions"| node_mobileapi
node_mobileapi -->|"controls sessions"| node_orchestrator
node_desktop -->|"controls voice"| node_voice
node_orchestrator -->|"stores outputs"| node_artifacts
node_heartbeat -->|"syncs state"| node_db
node_sources -.->|"uses authorization"| node_oauth

click node_desktop "https://github.com/peakflo/20x/blob/main/src/renderer/src/App.tsx"
click node_mobile "https://github.com/peakflo/20x/blob/main/src/mobile/App.tsx"
click node_bridge "https://github.com/peakflo/20x/blob/main/src/preload/index.ts"
click node_ipc "https://github.com/peakflo/20x/blob/main/src/main/ipc-handlers.ts"
click node_mobileapi "https://github.com/peakflo/20x/blob/main/src/main/mobile-api-server.ts"
click node_db "https://github.com/peakflo/20x/blob/main/src/main/database.ts"
click node_taskui "https://github.com/peakflo/20x/blob/main/src/renderer/src/components/tasks/TaskWorkspace.tsx"
click node_sources "https://github.com/peakflo/20x/blob/main/src/main/plugins/registry.ts"
click node_oauth "https://github.com/peakflo/20x/blob/main/src/main/oauth/oauth-manager.ts"
click node_orchestrator "https://github.com/peakflo/20x/blob/main/src/main/agent-manager.ts"
click node_adapters "https://github.com/peakflo/20x/blob/main/src/main/adapters/index.ts"
click node_workspace "https://github.com/peakflo/20x/blob/main/src/main/worktree-manager.ts"
click node_skills "https://github.com/peakflo/20x/blob/main/src/main/claude-plugin-manager.ts"
click node_mcp "https://github.com/peakflo/20x/blob/main/src/main/mcp-tool-caller.ts"
click node_scheduler "https://github.com/peakflo/20x/blob/main/src/main/task-automation-scheduler.ts"
click node_artifacts "https://github.com/peakflo/20x/blob/main/src/main/artifacts.ts"
click node_voice "https://github.com/peakflo/20x/blob/main/src/main/voice/voice-session-manager.ts"
click node_heartbeat "https://github.com/peakflo/20x/blob/main/src/main/enterprise-heartbeat.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_desktop,node_mobile,node_taskui,node_user toneBlue
class node_bridge,node_ipc,node_mobileapi,node_db toneAmber
class node_orchestrator,node_adapters,node_workspace,node_skills,node_mcp,node_scheduler toneMint
class node_sources,node_oauth toneRose
class node_artifacts,node_voice,node_heartbeat,node_agents toneIndigo
```

## Components

### User clients

- [Desktop UI](https://github.com/peakflo/20x/blob/main/src/renderer/src/App.tsx): `src/renderer/src/App.tsx`
- [Mobile client](https://github.com/peakflo/20x/blob/main/src/mobile/App.tsx): `src/mobile/App.tsx`
- [Task management](https://github.com/peakflo/20x/blob/main/src/renderer/src/components/tasks/TaskWorkspace.tsx): `src/renderer/src/components/tasks/TaskWorkspace.tsx`

### Desktop runtime

- [Preload bridge](https://github.com/peakflo/20x/blob/main/src/preload/index.ts): `src/preload/index.ts`
- [IPC handlers](https://github.com/peakflo/20x/blob/main/src/main/ipc-handlers.ts): `src/main/ipc-handlers.ts`
- [Mobile API](https://github.com/peakflo/20x/blob/main/src/main/mobile-api-server.ts): `src/main/mobile-api-server.ts`
- [SQLite database](https://github.com/peakflo/20x/blob/main/src/main/database.ts): `src/main/database.ts`

### Task execution

- [Agent manager](https://github.com/peakflo/20x/blob/main/src/main/agent-manager.ts): `src/main/agent-manager.ts`
- [Agent adapters](https://github.com/peakflo/20x/blob/main/src/main/adapters/index.ts): `src/main/adapters/index.ts`
- [Git worktrees](https://github.com/peakflo/20x/blob/main/src/main/worktree-manager.ts): `src/main/worktree-manager.ts`
- [Skills and plugins](https://github.com/peakflo/20x/blob/main/src/main/claude-plugin-manager.ts): `src/main/claude-plugin-manager.ts`
- [MCP tools](https://github.com/peakflo/20x/blob/main/src/main/mcp-tool-caller.ts): `src/main/mcp-tool-caller.ts`
- [Task schedulers](https://github.com/peakflo/20x/blob/main/src/main/task-automation-scheduler.ts): `src/main/task-automation-scheduler.ts`

### Integrations

- [Task integrations](https://github.com/peakflo/20x/blob/main/src/main/plugins/registry.ts): `src/main/plugins/registry.ts`
- [OAuth manager](https://github.com/peakflo/20x/blob/main/src/main/oauth/oauth-manager.ts): `src/main/oauth/oauth-manager.ts`

### Local capabilities

- [Artifacts](https://github.com/peakflo/20x/blob/main/src/main/artifacts.ts): `src/main/artifacts.ts`
- [Voice sessions](https://github.com/peakflo/20x/blob/main/src/main/voice/voice-session-manager.ts): `src/main/voice/voice-session-manager.ts`
- [Heartbeat sync](https://github.com/peakflo/20x/blob/main/src/main/enterprise-heartbeat.ts): `src/main/enterprise-heartbeat.ts`

### Other components

- **User**
- **Coding agents**

## Connections

- User → Desktop UI: creates tasks
- Desktop UI → Task management: manages tasks
- Task management → Preload bridge: invokes IPC
- Preload bridge → IPC handlers: dispatches calls
- IPC handlers → SQLite database: reads and writes
- IPC handlers → Agent manager: controls sessions
- Task integrations → SQLite database: syncs task data
- OAuth manager → SQLite database: stores tokens
- Agent manager → SQLite database: loads task state
- Agent manager → Git worktrees: prepares worktrees
- Agent manager → Skills and plugins: loads instructions
- Agent manager → MCP tools: calls tools
- Agent manager → Agent adapters: selects adapter
- Agent adapters → Coding agents: runs sessions
- Agent manager → SQLite database: saves outcomes
- Task schedulers → SQLite database: schedules tasks
- Mobile client → Mobile API: requests task data
- Mobile API → SQLite database: reads and writes
- Mobile client → Mobile API: starts sessions
- Mobile API → Agent manager: controls sessions
- Desktop UI → Voice sessions: controls voice
- Agent manager → Artifacts: stores outputs
- Heartbeat sync → SQLite database: syncs state
- Task integrations → OAuth manager: uses authorization
