# nayanareddyk/talent_ops architecture

> Architecture diagram of the GitHub repository nayanareddyk/talent_ops, 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/nayanareddyk/talent_ops
- Repository: https://github.com/nayanareddyk/talent_ops

## Overview

TalentOps is an agentic recruiting platform that takes a role and candidate resume through parsing, sourcing, screening, scheduling, voice interviewing, evaluation, and reporting, with low-confidence cases escalated for human review. The React dashboard starts and monitors runs and presents scorecards, fairness views, interviews, and recruiter debriefs. The README documents the supervisor’s agent responsibilities and major capabilities; sampled source confirms the run entry point, live-room registry, LLM and speech services, and debrief data access. Links for unsampled stages follow documented architecture, not inspected call sites.

Main entry points: [`frontend/src/App.jsx`](https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/App.jsx) (Recruiting Dashboard), [`app/agents/manager_agent.py`](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/manager_agent.py) (Manager Agent), [`app/graph/supervisor.py`](https://github.com/nayanareddyk/talent_ops/blob/main/app/graph/supervisor.py) (Pipeline Supervisor), [`app/agents/interviewer.py`](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/interviewer.py) (Adaptive Interviewer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Recruiter and Candidate UI"]
  node_dashboard["Recruiting Dashboard<br/>[App.jsx]"]
  node_pipeline_view["Pipeline View"]
  node_scorecard_ui["Scorecard and Fairness<br/>[ScorecardView.jsx]"]
  node_interview_ui["Interview Room UI<br/>[InterviewRoom.jsx]"]
end

subgraph group_orchestration["API and Orchestration"]
  node_api["FastAPI Entry<br/>[main.py]"]
  node_interview_routes["Interview Routes<br/>[interviews.py]"]
  node_fairness_routes["Fairness Routes<br/>[fairness.py]"]
  node_supervisor["Pipeline Supervisor<br/>[supervisor.py]"]
  node_confidence["Confidence Gate<br/>[confidence.py]"]
end

subgraph group_pipeline["Recruiting Pipeline"]
  node_parser["Resume Parsing<br/>[parser_agent.py]"]
  node_manager["Manager Agent<br/>[manager_agent.py]"]
  node_sourcing["Candidate Sourcing<br/>[sourcing.py]"]
  node_screening["Candidate Screening<br/>[screening.py]"]
  node_scheduling["Interview Scheduling<br/>[scheduling.py]"]
  node_evaluator["Interview Evaluation<br/>[evaluator_agent.py]"]
  node_reporting["Hiring Report<br/>[reporting.py]"]
  node_communications["Candidate Emails<br/>[communication.py]"]
end

subgraph group_interview["Interview and Debrief"]
  node_interviewer["Adaptive Interviewer<br/>[interviewer.py]"]
  node_interview_fsm["Interview State Machine<br/>[interviewer_fsm.py]"]
  node_oral_interview["Oral Interview"]
  node_room_manager["Live Room Registry<br/>[room_manager.py]"]
  node_speech["Speech Services<br/>[speech_engine.py]"]
  node_debrief["HR Debrief<br/>[manager_debrief.py]"]
end

subgraph group_data["Data and AI Services"]
  node_database[("Supabase Data<br/>[database.py]")]
  node_llm["LLM Services<br/>[llm_clients.py]"]
  node_gemini["Gemini Live"]
end

node_recruiter(("Recruiter"))
node_candidate(("Candidate"))
node_human_review(("Human Reviewer"))

node_recruiter -->|"uses"| node_dashboard
node_candidate -->|"joins"| node_interview_ui
node_dashboard -->|"shows pipeline"| node_pipeline_view
node_dashboard -->|"shows results"| node_scorecard_ui
node_dashboard -->|"opens room"| node_interview_ui
node_pipeline_view -->|"starts run"| node_api
node_api -->|"runs pipeline"| node_supervisor
node_api -->|"serves interviews"| node_interview_routes
node_dashboard -->|"requests fairness"| node_fairness_routes
node_supervisor -->|"invokes parsing"| node_parser
node_supervisor -->|"delegates control"| node_manager
node_manager -->|"routes sourcing"| node_sourcing
node_manager -->|"routes screening"| node_screening
node_manager -->|"routes scheduling"| node_scheduling
node_manager -->|"routes interview"| node_interviewer
node_manager -->|"routes evaluation"| node_evaluator
node_screening -->|"checks match"| node_confidence
node_confidence -->|"flags low confidence"| node_human_review
node_supervisor -->|"generates report"| node_reporting
node_supervisor -->|"sends decisions"| node_communications
node_interviewer -->|"advances states"| node_interview_fsm
node_interviewer -->|"conducts interview"| node_oral_interview
node_oral_interview -->|"transcribes and speaks"| node_speech
node_interview_routes -->|"manages rooms"| node_room_manager
node_room_manager -->|"persists rooms"| node_database
node_room_manager -->|"evaluates transcript"| node_evaluator
node_interview_ui -->|"connects to room"| node_interview_routes
node_debrief -->|"loads interview data"| node_database
node_debrief -->|"creates debrief room"| node_room_manager
node_interviewer -->|"generates questions"| node_llm
node_debrief -->|"answers HR"| node_llm
node_oral_interview -.->|"uses live session"| node_gemini
node_dashboard -.->|"reads dashboard data"| node_database
node_fairness_routes -->|"reads decisions"| node_database

click node_dashboard "https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/App.jsx"
click node_pipeline_view "https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/PipelineDashboardView.jsx"
click node_scorecard_ui "https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/ScorecardView.jsx"
click node_interview_ui "https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/InterviewRoom.jsx"
click node_api "https://github.com/nayanareddyk/talent_ops/blob/main/app/main.py"
click node_interview_routes "https://github.com/nayanareddyk/talent_ops/blob/main/app/api/routes/interviews.py"
click node_fairness_routes "https://github.com/nayanareddyk/talent_ops/blob/main/app/api/routes/fairness.py"
click node_supervisor "https://github.com/nayanareddyk/talent_ops/blob/main/app/graph/supervisor.py"
click node_confidence "https://github.com/nayanareddyk/talent_ops/blob/main/app/graph/confidence.py"
click node_parser "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/parser_agent.py"
click node_manager "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/manager_agent.py"
click node_sourcing "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/sourcing.py"
click node_screening "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/screening.py"
click node_scheduling "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/scheduling.py"
click node_evaluator "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/evaluator_agent.py"
click node_reporting "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/reporting.py"
click node_communications "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/communication.py"
click node_interviewer "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/interviewer.py"
click node_interview_fsm "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/interviewer_fsm.py"
click node_oral_interview "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/oral_interview_agent.py"
click node_room_manager "https://github.com/nayanareddyk/talent_ops/blob/main/app/rooms/room_manager.py"
click node_speech "https://github.com/nayanareddyk/talent_ops/blob/main/app/services/speech_engine.py"
click node_debrief "https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/manager_debrief.py"
click node_database "https://github.com/nayanareddyk/talent_ops/blob/main/app/services/database.py"
click node_llm "https://github.com/nayanareddyk/talent_ops/blob/main/app/services/llm_clients.py"
click node_gemini "https://github.com/nayanareddyk/talent_ops/blob/main/app/services/gemini_live_session.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_dashboard,node_pipeline_view,node_scorecard_ui,node_interview_ui,node_human_review toneBlue
class node_api,node_interview_routes,node_fairness_routes,node_supervisor,node_confidence toneAmber
class node_parser,node_manager,node_sourcing,node_screening,node_scheduling,node_evaluator,node_reporting,node_communications toneMint
class node_interviewer,node_interview_fsm,node_oral_interview,node_room_manager,node_speech,node_debrief toneRose
class node_database,node_llm,node_gemini,node_recruiter,node_candidate toneIndigo
```

## Components

### Recruiter and Candidate UI

- [Recruiting Dashboard](https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Pipeline View](https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/PipelineDashboardView.jsx): `frontend/src/components/PipelineDashboardView.jsx`
- [Scorecard and Fairness](https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/ScorecardView.jsx): `frontend/src/components/ScorecardView.jsx`
- [Interview Room UI](https://github.com/nayanareddyk/talent_ops/blob/main/frontend/src/components/InterviewRoom.jsx): `frontend/src/components/InterviewRoom.jsx`

### API and Orchestration

- [FastAPI Entry](https://github.com/nayanareddyk/talent_ops/blob/main/app/main.py): `app/main.py`
- [Interview Routes](https://github.com/nayanareddyk/talent_ops/blob/main/app/api/routes/interviews.py): `app/api/routes/interviews.py`
- [Fairness Routes](https://github.com/nayanareddyk/talent_ops/blob/main/app/api/routes/fairness.py): `app/api/routes/fairness.py`
- [Pipeline Supervisor](https://github.com/nayanareddyk/talent_ops/blob/main/app/graph/supervisor.py): `app/graph/supervisor.py`
- [Confidence Gate](https://github.com/nayanareddyk/talent_ops/blob/main/app/graph/confidence.py): `app/graph/confidence.py`

### Recruiting Pipeline

- [Resume Parsing](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/parser_agent.py): `app/agents/parser_agent.py`
- [Manager Agent](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/manager_agent.py): `app/agents/manager_agent.py`
- [Candidate Sourcing](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/sourcing.py): `app/agents/sourcing.py`
- [Candidate Screening](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/screening.py): `app/agents/screening.py`
- [Interview Scheduling](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/scheduling.py): `app/agents/scheduling.py`
- [Interview Evaluation](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/evaluator_agent.py): `app/agents/evaluator_agent.py`
- [Hiring Report](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/reporting.py): `app/agents/reporting.py`
- [Candidate Emails](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/communication.py): `app/agents/communication.py`

### Interview and Debrief

- [Adaptive Interviewer](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/interviewer.py): `app/agents/interviewer.py`
- [Interview State Machine](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/interviewer_fsm.py): `app/agents/interviewer_fsm.py`
- [Oral Interview](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/oral_interview_agent.py): `app/agents/oral_interview_agent.py`
- [Live Room Registry](https://github.com/nayanareddyk/talent_ops/blob/main/app/rooms/room_manager.py): `app/rooms/room_manager.py`
- [Speech Services](https://github.com/nayanareddyk/talent_ops/blob/main/app/services/speech_engine.py): `app/services/speech_engine.py`
- [HR Debrief](https://github.com/nayanareddyk/talent_ops/blob/main/app/agents/manager_debrief.py): `app/agents/manager_debrief.py`

### Data and AI Services

- [Supabase Data](https://github.com/nayanareddyk/talent_ops/blob/main/app/services/database.py): `app/services/database.py`
- [LLM Services](https://github.com/nayanareddyk/talent_ops/blob/main/app/services/llm_clients.py): `app/services/llm_clients.py`
- [Gemini Live](https://github.com/nayanareddyk/talent_ops/blob/main/app/services/gemini_live_session.py): `app/services/gemini_live_session.py`

### Other components

- **Recruiter**
- **Candidate**
- **Human Reviewer**

## Connections

- Recruiter → Recruiting Dashboard: uses
- Candidate → Interview Room UI: joins
- Recruiting Dashboard → Pipeline View: shows pipeline
- Recruiting Dashboard → Scorecard and Fairness: shows results
- Recruiting Dashboard → Interview Room UI: opens room
- Pipeline View → FastAPI Entry: starts run
- FastAPI Entry → Pipeline Supervisor: runs pipeline
- FastAPI Entry → Interview Routes: serves interviews
- Recruiting Dashboard → Fairness Routes: requests fairness
- Pipeline Supervisor → Resume Parsing: invokes parsing
- Pipeline Supervisor → Manager Agent: delegates control
- Manager Agent → Candidate Sourcing: routes sourcing
- Manager Agent → Candidate Screening: routes screening
- Manager Agent → Interview Scheduling: routes scheduling
- Manager Agent → Adaptive Interviewer: routes interview
- Manager Agent → Interview Evaluation: routes evaluation
- Candidate Screening → Confidence Gate: checks match
- Confidence Gate → Human Reviewer: flags low confidence
- Pipeline Supervisor → Hiring Report: generates report
- Pipeline Supervisor → Candidate Emails: sends decisions
- Adaptive Interviewer → Interview State Machine: advances states
- Adaptive Interviewer → Oral Interview: conducts interview
- Oral Interview → Speech Services: transcribes and speaks
- Interview Routes → Live Room Registry: manages rooms
- Live Room Registry → Supabase Data: persists rooms
- Live Room Registry → Interview Evaluation: evaluates transcript
- Interview Room UI → Interview Routes: connects to room
- HR Debrief → Supabase Data: loads interview data
- HR Debrief → Live Room Registry: creates debrief room
- Adaptive Interviewer → LLM Services: generates questions
- HR Debrief → LLM Services: answers HR
- Oral Interview → Gemini Live: uses live session
- Recruiting Dashboard → Supabase Data: reads dashboard data
- Fairness Routes → Supabase Data: reads decisions
