# stack-cairn/liveagent architecture

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

- Interactive diagram: https://gitdiagram.com/stack-cairn/liveagent
- Repository: https://github.com/stack-cairn/liveagent

## Overview

LiveAgent is a local-first AI agent desktop with an optional remote Gateway. The primary flow is a user conversation through the desktop chat runtime to a configured model, with local tools available to act on workspace files and processes; results stream into the transcript and history. Separate capabilities include memory, automation, MCP/Skills, and remote browser access. The graph combines README-described capabilities with the supplied tree and sampled call sites; several subsystem paths are supported by the tree but their internal wiring was not sampled.

Main entry points: [`crates/agent-gui/src/pages/chat/runtime/useProjectToolTextGenerationClient.ts`](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/runtime/useProjectToolTextGenerationClient.ts) (Chat runtime), [`crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts`](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts) (Desktop UI), [`crates/agent-gateway/internal/server/http.go`](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/server/http.go) (Gateway server), [`crates/agent-gui/src/lib/providers/llm.ts`](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/providers/llm.ts) (Model providers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop chat"]
  node_desktopui["Desktop UI"]
  node_chatruntime["Chat runtime"]
  node_model["Model providers<br/>[llm.ts]"]
  node_transcript["Live transcript"]
end

subgraph group_tools["Local agent tools"]
  node_workspace["Workspace tools<br/>[mod.rs]"]
  node_process["Shell processes<br/>[managed_process.rs]"]
  node_terminal["Terminal and SSH<br/>[mod.rs]"]
  node_subagents["Sub-agents"]
  node_tunnel["Service tunnels<br/>[gateway.rs]"]
end

subgraph group_data["State and memory"]
  node_history[("Chat history<br/>[commands.rs]")]
  node_settings[("Settings<br/>[storage.ts]")]
  node_memory[("Persistent memory<br/>[store.rs]")]
  node_extraction["Memory extraction"]
  node_organizer["Memory organizer<br/>[pipeline.ts]"]
  node_automation["Scheduled automation<br/>[scheduler.rs]"]
end

subgraph group_extensions["Extensions"]
  node_mcp["MCP bridge<br/>[mcp.rs]"]
  node_skills["Skills ecosystem<br/>[agents.rs]"]
  node_browser["Browser access<br/>[bridge.rs]"]
end

subgraph group_gateway["Remote Gateway"]
  node_webui["Gateway WebUI<br/>[GatewayApp.tsx]"]
  node_gateway["Gateway server<br/>[http.go]"]
  node_gateway_sessions["Remote sessions<br/>[manager.go]"]
  node_desktop_bridge["Desktop gateway service<br/>[controller.rs]"]
  node_gateway_db[("Gateway state<br/>[db.go]")]
end

node_user(("User"))
node_remoteuser(("Browser user"))

node_user -->|"uses"| node_desktopui
node_desktopui -->|"submits chat"| node_chatruntime
node_chatruntime -->|"requests completion"| node_model
node_model -->|"returns response"| node_chatruntime
node_chatruntime -->|"streams updates"| node_transcript
node_transcript -.->|"persists conversation"| node_history
node_chatruntime -.->|"invokes tools"| node_workspace
node_chatruntime -.->|"runs commands"| node_process
node_chatruntime -.->|"opens terminal"| node_terminal
node_chatruntime -.->|"delegates work"| node_subagents
node_chatruntime -.->|"exposes service"| node_tunnel
node_desktopui -->|"loads and saves"| node_settings
node_chatruntime -.->|"extracts after turn"| node_extraction
node_extraction -->|"reads and applies"| node_memory
node_organizer -.->|"organizes entries"| node_memory
node_automation -.->|"runs scheduled jobs"| node_process
node_chatruntime -.->|"dispatches tools"| node_mcp
node_chatruntime -.->|"loads skills"| node_skills
node_chatruntime -.->|"uses browser tools"| node_browser
node_remoteuser -->|"uses"| node_webui
node_webui -->|"sends WebSocket requests"| node_gateway
node_gateway -->|"dispatches requests"| node_gateway_sessions
node_gateway_sessions -->|"relays agent operations"| node_desktop_bridge
node_gateway -.->|"reads and writes"| node_gateway_db

click node_desktopui "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts"
click node_chatruntime "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/runtime/useProjectToolTextGenerationClient.ts"
click node_model "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/providers/llm.ts"
click node_transcript "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts"
click node_history "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/history/chat_history/commands.rs"
click node_workspace "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/workspace/mod.rs"
click node_process "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/runtime/managed_process.rs"
click node_terminal "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/runtime/terminal/mod.rs"
click node_subagents "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/workspace/subagent_worktree.rs"
click node_tunnel "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/integration/gateway.rs"
click node_settings "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/settings/storage.ts"
click node_memory "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/memory/store.rs"
click node_extraction "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/chat/memory/extractionEngine.ts"
click node_organizer "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/memory/organizer/pipeline.ts"
click node_automation "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/automation/scheduler.rs"
click node_mcp "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/integration/mcp.rs"
click node_skills "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/config/settings/agents.rs"
click node_browser "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/browser/bridge.rs"
click node_webui "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/web/src/app/GatewayApp.tsx"
click node_gateway "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/server/http.go"
click node_gateway_sessions "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/session/manager.go"
click node_desktop_bridge "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/gateway/controller.rs"
click node_gateway_db "https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/db/db.go"

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_desktopui,node_chatruntime,node_model,node_transcript,node_user,node_remoteuser toneBlue
class node_workspace,node_process,node_terminal,node_subagents,node_tunnel toneAmber
class node_history,node_settings,node_memory,node_extraction,node_organizer,node_automation toneMint
class node_mcp,node_skills,node_browser toneRose
class node_webui,node_gateway,node_gateway_sessions,node_desktop_bridge,node_gateway_db toneIndigo
```

## Components

### Desktop chat

- [Desktop UI](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts): `crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts`
- [Chat runtime](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/runtime/useProjectToolTextGenerationClient.ts): `crates/agent-gui/src/pages/chat/runtime/useProjectToolTextGenerationClient.ts`
- [Model providers](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/providers/llm.ts): `crates/agent-gui/src/lib/providers/llm.ts`
- [Live transcript](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts): `crates/agent-gui/src/pages/chat/hooks/useLiveTranscriptController.ts`

### Local agent tools

- [Workspace tools](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/workspace/mod.rs): `crates/agent-gui/src-tauri/src/commands/workspace/mod.rs`
- [Shell processes](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/runtime/managed_process.rs): `crates/agent-gui/src-tauri/src/runtime/managed_process.rs`
- [Terminal and SSH](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/runtime/terminal/mod.rs): `crates/agent-gui/src-tauri/src/runtime/terminal/mod.rs`
- [Sub-agents](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/workspace/subagent_worktree.rs): `crates/agent-gui/src-tauri/src/commands/workspace/subagent_worktree.rs`
- [Service tunnels](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/integration/gateway.rs): `crates/agent-gui/src-tauri/src/commands/integration/gateway.rs`

### State and memory

- [Chat history](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/history/chat_history/commands.rs): `crates/agent-gui/src-tauri/src/commands/history/chat_history/commands.rs`
- [Settings](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/settings/storage.ts): `crates/agent-gui/src/lib/settings/storage.ts`
- [Persistent memory](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/memory/store.rs): `crates/agent-gui/src-tauri/src/services/memory/store.rs`
- [Memory extraction](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/chat/memory/extractionEngine.ts): `crates/agent-gui/src/lib/chat/memory/extractionEngine.ts`
- [Memory organizer](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src/lib/memory/organizer/pipeline.ts): `crates/agent-gui/src/lib/memory/organizer/pipeline.ts`
- [Scheduled automation](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/automation/scheduler.rs): `crates/agent-gui/src-tauri/src/services/automation/scheduler.rs`

### Extensions

- [MCP bridge](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/integration/mcp.rs): `crates/agent-gui/src-tauri/src/commands/integration/mcp.rs`
- [Skills ecosystem](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/commands/config/settings/agents.rs): `crates/agent-gui/src-tauri/src/commands/config/settings/agents.rs`
- [Browser access](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/browser/bridge.rs): `crates/agent-gui/src-tauri/src/services/browser/bridge.rs`

### Remote Gateway

- [Gateway WebUI](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/web/src/app/GatewayApp.tsx): `crates/agent-gateway/web/src/app/GatewayApp.tsx`
- [Gateway server](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/server/http.go): `crates/agent-gateway/internal/server/http.go`
- [Remote sessions](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/session/manager.go): `crates/agent-gateway/internal/session/manager.go`
- [Desktop gateway service](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gui/src-tauri/src/services/gateway/controller.rs): `crates/agent-gui/src-tauri/src/services/gateway/controller.rs`
- [Gateway state](https://github.com/stack-cairn/liveagent/blob/main/crates/agent-gateway/internal/db/db.go): `crates/agent-gateway/internal/db/db.go`

### Other components

- **User**
- **Browser user**

## Connections

- User → Desktop UI: uses
- Desktop UI → Chat runtime: submits chat
- Chat runtime → Model providers: requests completion
- Model providers → Chat runtime: returns response
- Chat runtime → Live transcript: streams updates
- Live transcript → Chat history: persists conversation
- Chat runtime → Workspace tools: invokes tools
- Chat runtime → Shell processes: runs commands
- Chat runtime → Terminal and SSH: opens terminal
- Chat runtime → Sub-agents: delegates work
- Chat runtime → Service tunnels: exposes service
- Desktop UI → Settings: loads and saves
- Chat runtime → Memory extraction: extracts after turn
- Memory extraction → Persistent memory: reads and applies
- Memory organizer → Persistent memory: organizes entries
- Scheduled automation → Shell processes: runs scheduled jobs
- Chat runtime → MCP bridge: dispatches tools
- Chat runtime → Skills ecosystem: loads skills
- Chat runtime → Browser access: uses browser tools
- Browser user → Gateway WebUI: uses
- Gateway WebUI → Gateway server: sends WebSocket requests
- Gateway server → Remote sessions: dispatches requests
- Remote sessions → Desktop gateway service: relays agent operations
- Gateway server → Gateway state: reads and writes
