# sakshamsingh22/quorum-multi-agent-research architecture

> Architecture diagram of the GitHub repository sakshamsingh22/quorum-multi-agent-research, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sakshamsingh22/quorum-multi-agent-research
- Repository: https://github.com/sakshamsingh22/quorum-multi-agent-research

## Overview

Quorum is a multi-agent research assistant with both a Streamlit workspace and a CLI entry point. A topic is validated, searched, used to select and read a public source, synthesized into a structured report, and critiqued; the UI presents progress and results. The graph separates orchestration, agent stages, and web tools/security. The README documents the four-stage flow; sampled source shows the orchestration and tool wiring, but not every UI detail.

Main entry points: [`app.py`](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/app.py) (Streamlit workspace), [`pipeline.py`](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/pipeline.py) (Stage orchestration), [`agents.py`](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py) (Search agent), [`tools.py`](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/tools.py) (Page extraction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_streamlit_ui["Streamlit workspace<br/>[app.py]"]
  node_cli_pipeline["CLI pipeline<br/>[pipeline.py]"]
  node_research_result["Report and critique<br/>[app.py]"]
end

subgraph group_workflow["Research workflow"]
  node_orchestrator["Stage orchestration<br/>[pipeline.py]"]
  node_search_agent["Search agent<br/>[agents.py]"]
  node_reader_agent["Reader agent<br/>[agents.py]"]
  node_writer["Report writer<br/>[agents.py]"]
  node_critic["Report critic<br/>[agents.py]"]
end

subgraph group_research_tools["Research tools"]
  node_web_search["Web search<br/>[tools.py]"]
  node_page_reader["Page extraction<br/>[tools.py]"]
  node_url_guard["URL validation<br/>[security.py]"]
end

node_researcher(("Researcher"))
node_tavily{{"Tavily Search"}}
node_mistral{{"Mistral model"}}
node_public_web{{"Public web pages"}}

node_researcher -->|"submits topic"| node_streamlit_ui
node_researcher -->|"enters topic"| node_cli_pipeline
node_cli_pipeline -->|"runs"| node_orchestrator
node_streamlit_ui -->|"invokes"| node_search_agent
node_streamlit_ui -->|"invokes"| node_reader_agent
node_streamlit_ui -->|"invokes"| node_writer
node_streamlit_ui -->|"invokes"| node_critic
node_orchestrator -->|"invokes"| node_search_agent
node_orchestrator -->|"invokes"| node_reader_agent
node_orchestrator -->|"invokes"| node_writer
node_orchestrator -->|"invokes"| node_critic
node_search_agent -->|"uses tool"| node_web_search
node_reader_agent -->|"uses tool"| node_page_reader
node_web_search -->|"searches"| node_tavily
node_page_reader -->|"validates URL"| node_url_guard
node_page_reader -->|"fetches page"| node_public_web
node_search_agent -->|"runs model"| node_mistral
node_reader_agent -->|"runs model"| node_mistral
node_writer -->|"runs model"| node_mistral
node_critic -->|"runs model"| node_mistral
node_streamlit_ui -->|"renders"| node_research_result

click node_streamlit_ui "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/app.py"
click node_cli_pipeline "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/pipeline.py"
click node_orchestrator "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/pipeline.py"
click node_search_agent "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py"
click node_reader_agent "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py"
click node_writer "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py"
click node_critic "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py"
click node_web_search "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/tools.py"
click node_page_reader "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/tools.py"
click node_url_guard "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/security.py"
click node_research_result "https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/app.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_streamlit_ui,node_cli_pipeline,node_research_result toneBlue
class node_orchestrator,node_search_agent,node_reader_agent,node_writer,node_critic toneAmber
class node_web_search,node_page_reader,node_url_guard toneMint
class node_researcher,node_tavily,node_mistral,node_public_web toneIndigo
```

## Components

### User interfaces

- [Streamlit workspace](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/app.py): `app.py`
- [CLI pipeline](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/pipeline.py): `pipeline.py`
- [Report and critique](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/app.py): `app.py`

### Research workflow

- [Stage orchestration](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/pipeline.py): `pipeline.py`
- [Search agent](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py): `agents.py`
- [Reader agent](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py): `agents.py`
- [Report writer](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py): `agents.py`
- [Report critic](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/agents.py): `agents.py`

### Research tools

- [Web search](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/tools.py): `tools.py`
- [Page extraction](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/tools.py): `tools.py`
- [URL validation](https://github.com/sakshamsingh22/quorum-multi-agent-research/blob/main/security.py): `security.py`

### Other components

- **Researcher**
- **Tavily Search**
- **Mistral model**
- **Public web pages**

## Connections

- Researcher → Streamlit workspace: submits topic (evidence: `README.md`)
- Researcher → CLI pipeline: enters topic (evidence: `README.md`)
- CLI pipeline → Stage orchestration: runs (evidence: `pipeline.py`)
- Streamlit workspace → Search agent: invokes (evidence: `app.py`)
- Streamlit workspace → Reader agent: invokes (evidence: `app.py`)
- Streamlit workspace → Report writer: invokes (evidence: `app.py`)
- Streamlit workspace → Report critic: invokes (evidence: `app.py`)
- Stage orchestration → Search agent: invokes (evidence: `pipeline.py`)
- Stage orchestration → Reader agent: invokes (evidence: `pipeline.py`)
- Stage orchestration → Report writer: invokes (evidence: `pipeline.py`)
- Stage orchestration → Report critic: invokes (evidence: `pipeline.py`)
- Search agent → Web search: uses tool (evidence: `agents.py`)
- Reader agent → Page extraction: uses tool (evidence: `agents.py`)
- Web search → Tavily Search: searches (evidence: `tools.py`)
- Page extraction → URL validation: validates URL (evidence: `tools.py`)
- Page extraction → Public web pages: fetches page (evidence: `tools.py`)
- Search agent → Mistral model: runs model (evidence: `agents.py`)
- Reader agent → Mistral model: runs model (evidence: `agents.py`)
- Report writer → Mistral model: runs model (evidence: `agents.py`)
- Report critic → Mistral model: runs model (evidence: `agents.py`)
- Streamlit workspace → Report and critique: renders (evidence: `app.py`)
