# krishnatiwari005/researchforge-ai architecture

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

- Interactive diagram: https://gitdiagram.com/krishnatiwari005/researchforge-ai
- Repository: https://github.com/krishnatiwari005/researchforge-ai

## Overview

ResearchForge AI is an Agno-based research and content-generation application. A user submits a topic to the Team Orchestrator, which can dispatch specialized agents across academic, web, news, social, and video sources; the team then synthesizes findings into a Medium-style draft. The user reviews the draft, and confirmed articles are saved as Markdown. The app also exposes a Gmail agent, conversation history, and AgentOS serving. Source configuration is concentrated in app.py; some workflow stages are documented in the README rather than implemented as separate modules.

Main entry points: [`app.py`](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py) (Team Orchestrator), [`medium_articles`](https://github.com/krishnatiwari005/researchforge-ai/tree/main/medium_articles) (Markdown Articles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Orchestration"]
  node_team["Team Orchestrator<br/>[app.py]"]
end

subgraph group_research["Research Agents"]
  node_arxiv["ArXiv Research<br/>[app.py]"]
  node_web["Web Research<br/>[app.py]"]
  node_hackernews["Hacker News<br/>[app.py]"]
  node_news["News Articles<br/>[app.py]"]
  node_wikipedia["Wikipedia Research<br/>[app.py]"]
  node_x["X Research<br/>[app.py]"]
  node_youtube["YouTube Research<br/>[app.py]"]
  node_reddit["Reddit Research<br/>[app.py]"]
  node_gmail["Gmail Agent<br/>[app.py]"]
end

subgraph group_content["Content Workflow"]
  node_papers["Research Papers<br/>[app.py]"]
  node_synthesis["Research Synthesis<br/>[app.py]"]
  node_draft["Article Draft<br/>[app.py]"]
  node_approval["User Approval<br/>[app.py]"]
  node_articles[("Markdown Articles")]
end

subgraph group_runtime["Runtime and State"]
  node_history[("Conversation History<br/>[app.py]")]
  node_agentos["AgentOS App<br/>[app.py]"]
end

node_user(("User"))
node_sources["External Research Sources"]
node_gmail_service["Gmail Service"]
node_groq["Groq Models"]

node_user -->|"submits topic"| node_team
node_team -->|"dispatches research"| node_arxiv
node_team -->|"dispatches research"| node_web
node_team -->|"dispatches research"| node_hackernews
node_team -->|"dispatches research"| node_news
node_team -->|"dispatches research"| node_wikipedia
node_team -->|"dispatches research"| node_x
node_team -->|"dispatches research"| node_youtube
node_team -->|"dispatches research"| node_reddit
node_team -->|"dispatches tasks"| node_gmail
node_arxiv -->|"searches papers"| node_sources
node_web -->|"searches web"| node_sources
node_hackernews -->|"searches discussions"| node_sources
node_news -->|"reads articles"| node_sources
node_wikipedia -->|"searches knowledge"| node_sources
node_x -->|"searches posts"| node_sources
node_youtube -->|"reads videos"| node_sources
node_reddit -->|"searches posts"| node_sources
node_arxiv -->|"downloads papers"| node_papers
node_team -->|"synthesizes findings"| node_synthesis
node_synthesis -->|"generates article"| node_draft
node_team -->|"presents draft"| node_draft
node_draft -->|"awaits review"| node_approval
node_approval -->|"requests confirmation"| node_user
node_team -->|"saves confirmed article"| node_articles
node_gmail -->|"manages email"| node_gmail_service
node_team -->|"stores conversation history"| node_history
node_agentos -->|"serves team"| node_team
node_team -->|"uses models"| node_groq

click node_team "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_arxiv "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_web "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_hackernews "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_news "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_wikipedia "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_x "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_youtube "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_reddit "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_gmail "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_papers "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_synthesis "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_draft "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_approval "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_articles "https://github.com/krishnatiwari005/researchforge-ai/tree/main/medium_articles"
click node_history "https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py"
click node_agentos "https://github.com/krishnatiwari005/researchforge-ai/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_team,node_user toneBlue
class node_arxiv,node_web,node_hackernews,node_news,node_wikipedia,node_x,node_youtube,node_reddit,node_gmail toneAmber
class node_papers,node_synthesis,node_draft,node_approval,node_articles toneMint
class node_history,node_agentos toneRose
class node_sources,node_gmail_service,node_groq toneIndigo
```

## Components

### Orchestration

- [Team Orchestrator](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`

### Research Agents

- [ArXiv Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Web Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Hacker News](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [News Articles](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Wikipedia Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [X Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [YouTube Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Reddit Research](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Gmail Agent](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`

### Content Workflow

- [Research Papers](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Research Synthesis](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Article Draft](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [User Approval](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [Markdown Articles](https://github.com/krishnatiwari005/researchforge-ai/tree/main/medium_articles): `medium_articles`

### Runtime and State

- [Conversation History](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`
- [AgentOS App](https://github.com/krishnatiwari005/researchforge-ai/blob/main/app.py): `app.py`

### Other components

- **User**
- **External Research Sources**
- **Gmail Service**
- **Groq Models**

## Connections

- User → Team Orchestrator: submits topic (evidence: `README.md`)
- Team Orchestrator → ArXiv Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → Web Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → Hacker News: dispatches research (evidence: `app.py`)
- Team Orchestrator → News Articles: dispatches research (evidence: `app.py`)
- Team Orchestrator → Wikipedia Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → X Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → YouTube Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → Reddit Research: dispatches research (evidence: `app.py`)
- Team Orchestrator → Gmail Agent: dispatches tasks (evidence: `app.py`)
- ArXiv Research → External Research Sources: searches papers (evidence: `app.py`)
- Web Research → External Research Sources: searches web (evidence: `app.py`)
- Hacker News → External Research Sources: searches discussions (evidence: `app.py`)
- News Articles → External Research Sources: reads articles (evidence: `app.py`)
- Wikipedia Research → External Research Sources: searches knowledge (evidence: `app.py`)
- X Research → External Research Sources: searches posts (evidence: `app.py`)
- YouTube Research → External Research Sources: reads videos (evidence: `app.py`)
- Reddit Research → External Research Sources: searches posts (evidence: `app.py`)
- ArXiv Research → Research Papers: downloads papers (evidence: `app.py`)
- Team Orchestrator → Research Synthesis: synthesizes findings (evidence: `README.md`)
- Research Synthesis → Article Draft: generates article (evidence: `README.md`)
- Team Orchestrator → Article Draft: presents draft (evidence: `README.md`)
- Article Draft → User Approval: awaits review (evidence: `README.md`)
- User Approval → User: requests confirmation (evidence: `README.md`)
- Team Orchestrator → Markdown Articles: saves confirmed article (evidence: `app.py`)
- Gmail Agent → Gmail Service: manages email (evidence: `app.py`)
- Team Orchestrator → Conversation History: stores conversation history (evidence: `app.py`)
- AgentOS App → Team Orchestrator: serves team (evidence: `app.py`)
- Team Orchestrator → Groq Models: uses models (evidence: `app.py`)
