Skip to main content

Architecture

┌──────────────┐ SPA OIDC (PKCE) ┌─────────────────┐
│ UI :8080 │ ───────────────► │ Keycloak IdP │
│ React │ ◄── access_token ─│ MFA / federated│
└──────┬───────┘ └─────────────────┘
│ Bearer JWT
▼
┌──────────────┐ enqueue ┌──────────────────────────────┐
│ API :8081 │ ───────────► │ Postgres jobs (SoT) │
│ Hono │ │ + optional NATS/Rabbit/Pulsar│
└──────┬───────┘ └──────────────┬───────────────┘
│ sessions / findings │ claim
▼ ▼
┌──────────────┐ ┌─────────────────┐
│ Postgres │ │ Workers │
│ product SoT │ │ (HPA / KEDA) │
└──────────────┘ └────────┬────────┘
│
┌──────────────────────────────┼────────────────────────┐
▼ ▼ ▼
Graph MCP (stdio in worker) Model router Sandbox / Prove
Neo4j · Janus · GraphQLite OpenAI · Anthropic · SpaceXAI local · docker · k8s
LayerRole
UIProduct surface; browser holds OIDC tokens
APIAuth, sessions, webhooks, enqueue
WorkerOrchestrator, specialists, judge, SCM publish
GraphStructural intelligence via MCP (embedded in workers)
QueuePostgres by default; optional broker for KEDA wake-up only

Data plane​

  • Postgres — sessions, findings, jobs, learning, users/orgs (when not pure IdP shadow)
  • Workspace disk — SCM clones under {STEW_WORKSPACE_DIR}/{orgId}/{sessionId}
  • Graph store — shared Neo4j/Janus recommended; namespaced by product orgId

Trust boundaries​

  • Tenant org admins manage members, connectors, models, policy
  • Platform operators manage install-wide runtime, license, queue recovery, graph rebuild
  • Workers should not share unjailed shells across orgs — see Multi-tenant workers

Deep dive: How a review works