Index/ Glean Agent Factory System Page
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.db
02

Layer Details

Electronmain.js
BrowserWindow loads frontend.
Spawns Python via python-manager.js.
preload.js exposes IPC bridge.
FrontendNext.js 14
File-system routing: /system maps to app/system/page.tsx.
Static export via output: 'export'.
HTTP client in lib/api.ts.
BackendFastAPI
Routers in 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 {"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 settings table, merges defaults from config.py.
Provides default_model and output_dir.page.tsx lib/api.ts app_settings.py SQLite
Electron IPCwindow.electronAPI
getAppVersion() — Returns Electron app version string
platform — Returns process.platform (e.g., “darwin”)page.tsx preload.js main.js
04

UI Sections (4 Cards)

01Service Status
Two tiles showing runtime health
Backend API Frontend
02Application
Version, Platform, Backend Port 8001, Frontend Port 3001, Default Model, Output Dir, Database path
03Architecture
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