# kritt-ai/open-kritt architecture

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

- Interactive diagram: https://gitdiagram.com/kritt-ai/open-kritt
- Repository: https://github.com/kritt-ai/open-kritt

## Overview

open·kritt is a self-hosted AI security research platform. Researchers configure reusable workflows and model access, launch scans against remote or local repositories, then review, validate, rank, and export findings. The graph preserves the main product stages and supporting configuration capabilities. Source excerpts establish frontend routing, API dispatch, scan validation, and worker responsibilities; several cross-service runtime connections are documented only at product level, so those edges are dashed rather than asserted as inspected calls.

Main entry points: [`frontend/src/main.jsx`](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/main.jsx) (Web application), [`backend/src/routes/scans.js`](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/routes/scans.js) (Scan routes), [`engine/open_kritt_engine/worker.py`](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/worker.py) (Job worker), [`backend/src/app.js`](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/app.js) (HTTP application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Researcher interface"]
  node_web["Web application<br/>[main.jsx]"]
  node_workflow_ui["Workflow editor"]
  node_scan_ui["Scan creation<br/>[CreateScan.jsx]"]
  node_results_ui["Scan results<br/>[ScanDetail.jsx]"]
  node_finding_ui["Finding detail"]
  node_api_client["API client<br/>[client.js]"]
end

subgraph group_api["Backend API"]
  node_http_api["HTTP application<br/>[app.js]"]
  node_scan_routes["Scan routes<br/>[scans.js]"]
  node_workflow_routes["Workflow routes<br/>[workflows.js]"]
  node_validation["Request validation<br/>[validation.js]"]
  node_repo_logic["Repository logic<br/>[repo.js]"]
  node_config_routes["Research configuration"]
end

subgraph group_engine["Scan engine"]
  node_worker["Job worker<br/>[worker.py]"]
  node_harnesses["Agent harnesses<br/>[harnesses.py]"]
  node_repository["Repository workspace<br/>[repository.py]"]
  node_post_processing["Finding validation<br/>[post_processing.py]"]
end

subgraph group_state["Persistence and results"]
  node_database[("Application database<br/>[db.js]")]
  node_engine_database[("Engine database<br/>[db.py]")]
  node_finding_export["Finding export<br/>[findingExport.js]"]
end

node_researcher(("Researcher"))

node_researcher -->|"uses"| node_web
node_web -->|"routes to"| node_workflow_ui
node_web -->|"routes to"| node_scan_ui
node_web -->|"routes to"| node_results_ui
node_web -->|"routes to"| node_finding_ui
node_workflow_ui -->|"uses"| node_api_client
node_scan_ui -.->|"submits scan"| node_api_client
node_results_ui -->|"loads results"| node_api_client
node_api_client -.->|"requests API"| node_http_api
node_http_api -->|"routes scans"| node_scan_routes
node_http_api -->|"routes workflows"| node_workflow_routes
node_http_api -->|"routes capabilities"| node_config_routes
node_scan_routes -->|"validates scan"| node_validation
node_scan_routes -->|"assembles scan"| node_repo_logic
node_workflow_routes -->|"validates workflow"| node_validation
node_researcher -->|"defines playbooks"| node_workflow_ui
node_researcher -->|"launches scans"| node_scan_ui
node_worker -->|"runs agents"| node_harnesses
node_worker -.->|"processes repositories"| node_repository
node_worker -.->|"validates findings"| node_post_processing
node_scan_routes -.->|"dispatches jobs"| node_worker
node_worker -.->|"persists job state"| node_engine_database
node_scan_routes -.->|"reads and writes"| node_database
node_results_ui -.->|"exports findings"| node_finding_export
node_researcher -->|"reviews findings"| node_results_ui
node_researcher -->|"configures verification"| node_post_processing

click node_web "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/main.jsx"
click node_workflow_ui "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/WorkflowBuilder.jsx"
click node_scan_ui "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/CreateScan.jsx"
click node_results_ui "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/ScanDetail.jsx"
click node_finding_ui "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/VulnerabilityPage.jsx"
click node_api_client "https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/api/client.js"
click node_http_api "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/app.js"
click node_scan_routes "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/routes/scans.js"
click node_workflow_routes "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/routes/workflows.js"
click node_validation "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/validation.js"
click node_repo_logic "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/repo.js"
click node_config_routes "https://github.com/kritt-ai/open-kritt/tree/main/backend/src/routes"
click node_worker "https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/worker.py"
click node_harnesses "https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/harnesses.py"
click node_repository "https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/repository.py"
click node_post_processing "https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/post_processing.py"
click node_database "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/db.js"
click node_engine_database "https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/db.py"
click node_finding_export "https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/findingExport.js"

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_web,node_workflow_ui,node_scan_ui,node_results_ui,node_finding_ui,node_api_client toneBlue
class node_http_api,node_scan_routes,node_workflow_routes,node_validation,node_repo_logic,node_config_routes toneAmber
class node_worker,node_harnesses,node_repository,node_post_processing toneMint
class node_database,node_engine_database,node_finding_export toneRose
class node_researcher toneIndigo
```

## Components

### Researcher interface

- [Web application](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/main.jsx): `frontend/src/main.jsx`
- [Workflow editor](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/WorkflowBuilder.jsx): `frontend/src/pages/WorkflowBuilder.jsx`
- [Scan creation](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/CreateScan.jsx): `frontend/src/pages/CreateScan.jsx`
- [Scan results](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/ScanDetail.jsx): `frontend/src/pages/ScanDetail.jsx`
- [Finding detail](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/pages/VulnerabilityPage.jsx): `frontend/src/pages/VulnerabilityPage.jsx`
- [API client](https://github.com/kritt-ai/open-kritt/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### Backend API

- [HTTP application](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/app.js): `backend/src/app.js`
- [Scan routes](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/routes/scans.js): `backend/src/routes/scans.js`
- [Workflow routes](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/routes/workflows.js): `backend/src/routes/workflows.js`
- [Request validation](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/validation.js): `backend/src/lib/validation.js`
- [Repository logic](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/repo.js): `backend/src/lib/repo.js`
- [Research configuration](https://github.com/kritt-ai/open-kritt/tree/main/backend/src/routes): `backend/src/routes`

### Scan engine

- [Job worker](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/worker.py): `engine/open_kritt_engine/worker.py`
- [Agent harnesses](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/harnesses.py): `engine/open_kritt_engine/harnesses.py`
- [Repository workspace](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/repository.py): `engine/open_kritt_engine/repository.py`
- [Finding validation](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/post_processing.py): `engine/open_kritt_engine/post_processing.py`

### Persistence and results

- [Application database](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/db.js): `backend/src/db.js`
- [Engine database](https://github.com/kritt-ai/open-kritt/blob/main/engine/open_kritt_engine/db.py): `engine/open_kritt_engine/db.py`
- [Finding export](https://github.com/kritt-ai/open-kritt/blob/main/backend/src/lib/findingExport.js): `backend/src/lib/findingExport.js`

### Other components

- **Researcher**

## Connections

- Researcher → Web application: uses (evidence: `README.md`)
- Web application → Workflow editor: routes to
- Web application → Scan creation: routes to
- Web application → Scan results: routes to
- Web application → Finding detail: routes to
- Workflow editor → API client: uses (evidence: `frontend/src/pages/WorkflowBuilder.jsx`)
- Scan creation → API client: submits scan
- Scan results → API client: loads results (evidence: `frontend/src/pages/ScanDetail.jsx`)
- API client → HTTP application: requests API
- HTTP application → Scan routes: routes scans (evidence: `backend/src/app.js`)
- HTTP application → Workflow routes: routes workflows (evidence: `backend/src/app.js`)
- HTTP application → Research configuration: routes capabilities (evidence: `backend/src/app.js`)
- Scan routes → Request validation: validates scan (evidence: `backend/src/routes/scans.js`)
- Scan routes → Repository logic: assembles scan (evidence: `backend/src/routes/scans.js`)
- Workflow routes → Request validation: validates workflow (evidence: `backend/src/routes/workflows.js`)
- Researcher → Workflow editor: defines playbooks (evidence: `README.md`)
- Researcher → Scan creation: launches scans (evidence: `README.md`)
- Job worker → Agent harnesses: runs agents (evidence: `engine/open_kritt_engine/worker.py`)
- Job worker → Repository workspace: processes repositories
- Job worker → Finding validation: validates findings (evidence: `engine/open_kritt_engine/worker.py`)
- Scan routes → Job worker: dispatches jobs
- Job worker → Engine database: persists job state (evidence: `engine/open_kritt_engine/worker.py`)
- Scan routes → Application database: reads and writes (evidence: `backend/src/routes/scans.js`)
- Scan results → Finding export: exports findings
- Researcher → Scan results: reviews findings (evidence: `README.md`)
- Researcher → Finding validation: configures verification (evidence: `README.md`)
