System Page · Desktop App Architecture
Glean Agent Factory System Page
Three-layer macOS desktop app — Electron + Next.js 14 + FastAPI + SQLite.
Electron
Next.js
FastAPI
Engine
SQLite
IPC
01
Stack Overview
Desktop AppElectron
Desktop shell, IPC bridge, Python process manager
:3001Next.js 14
React 18, Tailwind CSS, static export to
frontend/out/:8001FastAPI
REST API, SSE streaming, CORS restricted to localhost:3001
PythonEngine
Builder pipeline: orchestrator, LLM, context, patterns, budget, validator, interview
File DBSQLite
Persistent storage at
~/.glean-agent-factory/data.db02
Layer Details
Electronmain.js
BrowserWindow loads frontend.
Spawns Python via
Spawns Python via
python-manager.js.preload.js exposes IPC bridge.FrontendNext.js 14
File-system routing:
Static export via
HTTP client in
/system maps to app/system/page.tsx.Static export via
output: 'export'.HTTP client in
lib/api.ts.BackendFastAPI
Routers in
Settings from SQLite +
No auth — single-user, localhost only.
api/routes/.Settings from SQLite +
config.py defaults.No auth — single-user, localhost only.
03
System Page Data Flow
The System page is read-only. On mount, loadSystemInfo() fires three concurrent requests:
GET/api/health
Returns
Sets green/red dot on Backend API status tilepage.tsx → lib/api.ts → health.py
{"status":"ok","service":"glean-agent-factory"}Sets green/red dot on Backend API status tilepage.tsx → lib/api.ts → health.py
GET/api/settings
Reads
Provides
settings table, merges defaults from config.py.Provides
default_model and output_dir.page.tsx → lib/api.ts → app_settings.py → SQLiteElectron IPCwindow.electronAPI
getAppVersion() — Returns Electron app version stringplatform — Returns process.platform (e.g., “darwin”)page.tsx → preload.js → main.js04
UI Sections (4 Cards)
01Service Status
Two tiles showing runtime health
Backend API Frontend
Backend API Frontend
02Application
Version, Platform, Backend Port
8001, Frontend Port 3001, Default Model, Output Dir, Database path03Architecture
Visual diagram of the Electron → Next.js → FastAPI → Engine → SQLite stack
04Engine Details
Pipeline Phases, Quick-Start Patterns, Knowledge Docs, Max Tokens, Instruction Budget, Variable Syntax, Step Types, HITL Checkpoint
05
Key Patterns
SSE Streaming
Build progress streamed via sse-starlette to the frontend
HITL Checkpoint
Build pauses after Phase 1 (gap analysis) for approve/reject
Thread Pool
Anthropic streaming calls run in a dedicated thread pool
Dual Output
SQLite for UI state + disk files for direct access
No Auth
Single-user, localhost only — no authentication layer
CORS Lock
Backend only allows requests from localhost:3001
06
File Map
Frontend Files (3 files)
- frontend/app/layout.tsx — Root layout, sidebar nav includes /system link
- frontend/app/system/page.tsx — The System page (monolithic, no sub-components)
- frontend/lib/api.ts — HTTP client, BASE_URL: localhost:8001/api
Backend Files (4 files)
- backend/main.py — FastAPI app, registers all routers
- backend/api/routes/health.py — GET /api/health endpoint
- backend/api/routes/app_settings.py — GET /api/settings (also PUT for Settings page)
- backend/config.py — Pydantic settings, default_model + output_dir defaults
Electron Files (3 files)
- electron/main.js — Main process, IPC handlers, window management
- electron/preload.js — Exposes electronAPI (getAppVersion, platform)
- electron/python-manager.js — Spawns and monitors the FastAPI uvicorn process
Database (1 table used)
- backend/migrations/001_schema.sql — CREATE TABLE settings (key TEXT PK, value TEXT)
- ~/.glean-agent-factory/data.db — SQLite database file