Skip to content

Technical architecture overview

This page is the documentation map: how components are arranged, how a request crosses the system, then where to drill into layering, the kernel lifecycle, and governance. It does not replace topic pages; it is one navigable overview.

Deployment topology (typical private install)

Section titled “Deployment topology (typical private install)”
flowchart LR
B[Browser / SDK] --> W[Console or gateway]
W -->|REST / SSE| R[runtime]
R --> PG[(Postgres or SQLite)]
R --> Obj[(MinIO / S3)]
R --> LLM[Model provider]

The console talks to the runtime over HTTP/SSE. The business database and object store stay close to the deployment. Multi-instance setups must use object storage for the file sandbox, not local disk alone. See File sandbox and Deployment verification.

flowchart TB
subgraph Client["Client"]
SDK["SDK / HTTP"]
Web["Web console"]
end
subgraph Access["Access"]
HTTP["HTTP / SSE"]
Auth["Auth / identity binding"]
Ctx["RequestContext"]
EE["Enterprise license gate"]
end
subgraph Service["Service"]
API["API routes"]
Plug["Plugins / events / govern"]
end
subgraph Engine["Runtime engine"]
Sess["Session orchestration"]
Tool["Tools"]
Prov["Model gateway"]
Hitl["HITL / breaker"]
Fs["File sandbox"]
end
subgraph Data["Data"]
Store["SQLite / Postgres"]
RLS["RLS / audit / observation"]
end
Client --> Access --> Service --> Engine --> Data
Prov --> ExtLLM[Model provider]
Fs --> ExtS3[Object storage]
LayerResponsibility
ClientCall REST/SSE with isolation and role context
AccessProtocol termination, identity binding, three-dimensional context, RBAC, license gate
ServiceExternal contracts, plugins, events, cross-process /govern
RuntimeSession loop, tools, models, sandbox, approval and breaker hooks
DataPersistence, migrations, row-level security, audit and observation

Layer details: Layered architecture.

sequenceDiagram
participant C as Client
participant A as Access
participant S as Service routes
participant E as Runtime
participant D as Data
participant Bus as SSE
C->>Bus: Subscribe /event (optional, recommended)
C->>A: POST session / trigger / …
A->>A: Identity · tenant · RBAC · license
A->>S: Route
S->>E: SessionPrompt / dispatch / governance
E->>D: Message / Part / audit / …
E-->>Bus: Deltas and status
Bus-->>C: Event stream
E-->>C: Sync response (if using a sync API)

How one prompt becomes a tool call: End-to-end request lifecycle and HTTP streaming and SSE. How triggers fire: Trigger component chain.

Governance is not embedded inside a single agent binary. It hangs on a deployable service surface:

AttachmentRoleTopic
Access RBAC / identityWho may call which APIsRBAC · Identity
Tool permission / HITLWhether an action runs; whether another person must approveHITL
BreakerGlobal stopBreaker
Audit chainWhether history can be re-hashed after writeHash-chain audit
/governCross-process pre-checkOut-of-process governance
Data RLSTenant row isolationMulti-tenant RLS

Load boundary between MIT core and enterprise code: Open-core seam.

ItemNotes
EngineSQLite by default; Postgres when a connection string is set
IsolationPostgres: app.tenant_id + RLS; production roles must be NOBYPASSRLS
Dimensionstenant / owner / model enter request context
Sandboxlocal or minio/s3; multi-instance forbids local
Audit / observationStreams are queryable; integrity verify is license-gated
flowchart LR
Cap[Skill / MCP] --> Role[Agent Role]
Role --> Trig[Trigger]
Trig --> Run[Session or TeamRun]

See Three abstractions and Team collaboration.

QuestionGo to
Per-layer detailLayered architecture
Why out-of-processwhy-cs
How one chat turn runsKernel lifecycle
Reliability and deployReliability
Selection claimsWhy Agent Forge

Related: