# rapabru/re-ai-checker architecture

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

- Interactive diagram: https://gitdiagram.com/rapabru/re-ai-checker
- Repository: https://github.com/rapabru/re-ai-checker

## Overview

ReCheck verifies an AI-generated answer by selecting independent providers, querying them concurrently, aggregating their verdicts into a confidence/consensus result, and presenting or saving a report. Users can start this workflow from the CLI or from buttons injected into supported AI chat pages; the browser extension proxies verification requests to the local API, which also exposes a health check. Provider adapters parse structured model responses into shared results. The sampled source supports these main connections; some CLI details and extension rendering logic are documented or only partially sampled.

Main entry points: [`server.py`](https://github.com/rapabru/re-ai-checker/blob/main/server.py) (Local API), [`recheck.py`](https://github.com/rapabru/re-ai-checker/blob/main/recheck.py) (CLI workflow), [`providers/__init__.py`](https://github.com/rapabru/re-ai-checker/blob/main/providers/__init__.py) (Verifier selection), [`extension/content.js`](https://github.com/rapabru/re-ai-checker/blob/main/extension/content.js) (Injected UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Entry points"]
  node_cli["CLI workflow<br/>[recheck.py]"]
end

subgraph group_browser["Browser extension"]
  node_content["Injected UI<br/>[content.js]"]
  node_popup["Status popup<br/>[popup.js]"]
  node_background["Request proxy<br/>[background.js]"]
end

subgraph group_backend["Verification backend"]
  node_api["Local API<br/>[server.py]"]
end

subgraph group_providers["Model providers"]
  node_registry["Verifier selection<br/>[__init__.py]"]
  node_openai["OpenAI adapter<br/>[openai_provider.py]"]
  node_anthropic["Anthropic adapter"]
  node_gemini["Gemini adapter<br/>[gemini_provider.py]"]
  node_shared["Result parsing<br/>[base.py]"]
end

subgraph group_outputs["Results and reports"]
  node_reports["Consensus and reports<br/>[recheck.py]"]
end

node_cli_user(("CLI user"))
node_chat_user(("Chat user"))
node_ai_chat(("AI chat pages"))
node_openai_service{{"OpenAI API"}}
node_anthropic_service{{"Anthropic API"}}
node_gemini_service{{"Gemini API"}}
node_report_files[("Saved reports")]

node_cli_user -->|"provides input"| node_cli
node_cli -->|"selects verifiers"| node_registry
node_registry -->|"instantiates"| node_openai
node_registry -->|"instantiates"| node_anthropic
node_registry -->|"instantiates"| node_gemini
node_cli -->|"runs verification"| node_openai
node_cli -->|"runs verification"| node_anthropic
node_cli -->|"runs verification"| node_gemini
node_openai -->|"sends request"| node_openai_service
node_anthropic -->|"sends request"| node_anthropic_service
node_gemini -->|"sends request"| node_gemini_service
node_openai -->|"parses response"| node_shared
node_anthropic -->|"parses response"| node_shared
node_gemini -->|"parses response"| node_shared
node_cli -->|"summarizes results"| node_reports
node_reports -->|"writes reports"| node_report_files
node_chat_user -->|"asks question"| node_ai_chat
node_ai_chat -->|"hosts injected UI"| node_content
node_chat_user -->|"starts verification"| node_content
node_content -->|"sends payload"| node_background
node_background -->|"posts verification"| node_api
node_api -->|"selects verifiers"| node_registry
node_api -->|"runs verification"| node_openai
node_api -->|"runs verification"| node_anthropic
node_api -->|"runs verification"| node_gemini
node_api -->|"summarizes results"| node_reports
node_api -->|"writes reports"| node_report_files
node_api -->|"returns results"| node_background
node_background -->|"returns results"| node_content
node_content -->|"shows report"| node_chat_user
node_popup -->|"checks health"| node_api

click node_cli "https://github.com/rapabru/re-ai-checker/blob/main/recheck.py"
click node_content "https://github.com/rapabru/re-ai-checker/blob/main/extension/content.js"
click node_popup "https://github.com/rapabru/re-ai-checker/blob/main/extension/popup.js"
click node_background "https://github.com/rapabru/re-ai-checker/blob/main/extension/background.js"
click node_api "https://github.com/rapabru/re-ai-checker/blob/main/server.py"
click node_registry "https://github.com/rapabru/re-ai-checker/blob/main/providers/__init__.py"
click node_openai "https://github.com/rapabru/re-ai-checker/blob/main/providers/openai_provider.py"
click node_anthropic "https://github.com/rapabru/re-ai-checker/blob/main/providers/anthropic_provider.py"
click node_gemini "https://github.com/rapabru/re-ai-checker/blob/main/providers/gemini_provider.py"
click node_shared "https://github.com/rapabru/re-ai-checker/blob/main/providers/base.py"
click node_reports "https://github.com/rapabru/re-ai-checker/blob/main/recheck.py"

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_cli,node_cli_user,node_chat_user toneBlue
class node_content,node_popup,node_background,node_report_files toneAmber
class node_api,node_openai_service,node_anthropic_service,node_gemini_service toneMint
class node_registry,node_openai,node_anthropic,node_gemini,node_shared toneRose
class node_reports,node_ai_chat toneIndigo
```

## Components

### Entry points

- [CLI workflow](https://github.com/rapabru/re-ai-checker/blob/main/recheck.py): `recheck.py`

### Browser extension

- [Injected UI](https://github.com/rapabru/re-ai-checker/blob/main/extension/content.js): `extension/content.js`
- [Status popup](https://github.com/rapabru/re-ai-checker/blob/main/extension/popup.js): `extension/popup.js`
- [Request proxy](https://github.com/rapabru/re-ai-checker/blob/main/extension/background.js): `extension/background.js`

### Verification backend

- [Local API](https://github.com/rapabru/re-ai-checker/blob/main/server.py): `server.py`

### Model providers

- [Verifier selection](https://github.com/rapabru/re-ai-checker/blob/main/providers/__init__.py): `providers/__init__.py`
- [OpenAI adapter](https://github.com/rapabru/re-ai-checker/blob/main/providers/openai_provider.py): `providers/openai_provider.py`
- [Anthropic adapter](https://github.com/rapabru/re-ai-checker/blob/main/providers/anthropic_provider.py): `providers/anthropic_provider.py`
- [Gemini adapter](https://github.com/rapabru/re-ai-checker/blob/main/providers/gemini_provider.py): `providers/gemini_provider.py`
- [Result parsing](https://github.com/rapabru/re-ai-checker/blob/main/providers/base.py): `providers/base.py`

### Results and reports

- [Consensus and reports](https://github.com/rapabru/re-ai-checker/blob/main/recheck.py): `recheck.py`

### Other components

- **CLI user**
- **Chat user**
- **AI chat pages**
- **OpenAI API**
- **Anthropic API**
- **Gemini API**
- **Saved reports**

## Connections

- CLI user → CLI workflow: provides input
- CLI workflow → Verifier selection: selects verifiers
- Verifier selection → OpenAI adapter: instantiates
- Verifier selection → Anthropic adapter: instantiates
- Verifier selection → Gemini adapter: instantiates
- CLI workflow → OpenAI adapter: runs verification
- CLI workflow → Anthropic adapter: runs verification
- CLI workflow → Gemini adapter: runs verification
- OpenAI adapter → OpenAI API: sends request
- Anthropic adapter → Anthropic API: sends request
- Gemini adapter → Gemini API: sends request
- OpenAI adapter → Result parsing: parses response
- Anthropic adapter → Result parsing: parses response
- Gemini adapter → Result parsing: parses response
- CLI workflow → Consensus and reports: summarizes results
- Consensus and reports → Saved reports: writes reports
- Chat user → AI chat pages: asks question
- AI chat pages → Injected UI: hosts injected UI
- Chat user → Injected UI: starts verification
- Injected UI → Request proxy: sends payload
- Request proxy → Local API: posts verification
- Local API → Verifier selection: selects verifiers
- Local API → OpenAI adapter: runs verification
- Local API → Anthropic adapter: runs verification
- Local API → Gemini adapter: runs verification
- Local API → Consensus and reports: summarizes results
- Local API → Saved reports: writes reports
- Local API → Request proxy: returns results
- Request proxy → Injected UI: returns results
- Injected UI → Chat user: shows report
- Status popup → Local API: checks health
