# intusar/auto_jobs_applier_ai_agent architecture

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

## Overview

AIHawk automates a job seeker’s LinkedIn search and application workflow: the user supplies search preferences, profile/resume data, and credentials; the bot searches and filters listings, personalizes answers, completes Easy Apply forms, and records applications. Search, application handling, AI personalization, and profile/configuration are distinct subsystems. The README also describes tailored resume generation, bulk application, blacklisting, and secure YAML configuration; some of these capabilities are documented but their implementation is not fully shown in the sampled source.

Main entry points: [`main.py`](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/main.py) (CLI & orchestration), [`src/ai_hawk/linkedIn_easy_applier.py`](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/linkedIn_easy_applier.py) (Easy Apply handler), [`src/ai_hawk/job_manager.py`](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/job_manager.py) (Search & filtering), [`src/ai_hawk/llm/llm_manager.py`](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/llm/llm_manager.py) (AI answer generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Profile &amp; setup"]
  node_entry["CLI &amp; orchestration<br/>[main.py]"]
  node_settings["Search settings"]
  node_profile["Application profile"]
  node_secrets["LLM credentials"]
end

subgraph group_search["Job search"]
  node_auth["LinkedIn authentication<br/>[authenticator.py]"]
  node_manager["Search &amp; filtering<br/>[job_manager.py]"]
  node_job["Job listing<br/>[job.py]"]
end

subgraph group_apply["Applications"]
  node_applier["Easy Apply handler"]
  node_context["Application context<br/>[jobContext.py]"]
  node_application["Application record<br/>[job_application.py]"]
  node_saver["Application archive"]
  node_resume["Tailored resume generation"]
end

subgraph group_ai["AI personalization"]
  node_answerer["AI answer generation<br/>[llm_manager.py]"]
  node_prompts["Prompt templates<br/>[prompts.py]"]
end

subgraph group_support["Runtime support"]
  node_browser["Browser utilities<br/>[browser_utils.py]"]
  node_chrome["Chrome setup<br/>[chrome_utils.py]"]
end

node_user(("Job seeker"))
node_linkedin{{"LinkedIn"}}
node_llm{{"LLM providers"}}
node_archive[("Application files")]

node_user -->|"starts search"| node_entry
node_entry -->|"loads settings"| node_settings
node_entry -->|"loads credentials"| node_secrets
node_entry -->|"loads profile"| node_profile
node_entry -->|"starts browser"| node_chrome
node_entry -.->|"initializes login"| node_auth
node_entry -.->|"starts search"| node_manager
node_auth -.->|"authenticates"| node_linkedin
node_manager -.->|"searches listings"| node_linkedin
node_manager -.->|"creates listings"| node_job
node_manager -->|"dispatches applications"| node_applier
node_manager -->|"scrolls results"| node_browser
node_applier -->|"uses context"| node_context
node_context -->|"holds application"| node_application
node_applier -->|"requests answers"| node_answerer
node_answerer -->|"uses templates"| node_prompts
node_answerer -->|"invokes model"| node_llm
node_applier -.->|"requests tailoring"| node_resume
node_applier -->|"records answers"| node_application
node_applier -.->|"submits form"| node_linkedin
node_applier -.->|"saves application"| node_saver
node_saver -->|"writes records"| node_archive
node_chrome -.->|"opens browser"| node_linkedin

click node_entry "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/main.py"
click node_settings "https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/data_folder"
click node_profile "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application_profile.py"
click node_secrets "https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/data_folder"
click node_auth "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/authenticator.py"
click node_manager "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/job_manager.py"
click node_job "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job.py"
click node_browser "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/utils/browser_utils.py"
click node_chrome "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/utils/chrome_utils.py"
click node_applier "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/linkedIn_easy_applier.py"
click node_context "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/jobContext.py"
click node_application "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application.py"
click node_saver "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application_saver.py"
click node_resume "https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/src/ai_hawk"
click node_answerer "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/llm/llm_manager.py"
click node_prompts "https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/llm/prompts.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_entry,node_settings,node_profile,node_secrets toneBlue
class node_auth,node_manager,node_job,node_archive toneAmber
class node_applier,node_context,node_application,node_saver,node_resume toneMint
class node_answerer,node_prompts toneRose
class node_browser,node_chrome,node_user,node_linkedin,node_llm toneIndigo
```

## Components

### Profile & setup

- [CLI & orchestration](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/main.py): `main.py`
- [Search settings](https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/data_folder): `data_folder`
- [Application profile](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application_profile.py): `src/job_application_profile.py`
- [LLM credentials](https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/data_folder): `data_folder`

### Job search

- [LinkedIn authentication](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/authenticator.py): `src/ai_hawk/authenticator.py`
- [Search & filtering](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/job_manager.py): `src/ai_hawk/job_manager.py`
- [Job listing](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job.py): `src/job.py`

### Applications

- [Easy Apply handler](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/linkedIn_easy_applier.py): `src/ai_hawk/linkedIn_easy_applier.py`
- [Application context](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/jobContext.py): `src/jobContext.py`
- [Application record](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application.py): `src/job_application.py`
- [Application archive](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/job_application_saver.py): `src/job_application_saver.py`
- [Tailored resume generation](https://github.com/intusar/auto_jobs_applier_ai_agent/tree/main/src/ai_hawk): `src/ai_hawk`

### AI personalization

- [AI answer generation](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/llm/llm_manager.py): `src/ai_hawk/llm/llm_manager.py`
- [Prompt templates](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/ai_hawk/llm/prompts.py): `src/ai_hawk/llm/prompts.py`

### Runtime support

- [Browser utilities](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/utils/browser_utils.py): `src/utils/browser_utils.py`
- [Chrome setup](https://github.com/intusar/auto_jobs_applier_ai_agent/blob/main/src/utils/chrome_utils.py): `src/utils/chrome_utils.py`

### Other components

- **Job seeker**
- **LinkedIn**
- **LLM providers**
- **Application files**

## Connections

- Job seeker → CLI & orchestration: starts search (evidence: `README.md`)
- CLI & orchestration → Search settings: loads settings (evidence: `main.py`)
- CLI & orchestration → LLM credentials: loads credentials (evidence: `main.py`)
- CLI & orchestration → Application profile: loads profile (evidence: `main.py`)
- CLI & orchestration → Chrome setup: starts browser (evidence: `main.py`)
- CLI & orchestration → LinkedIn authentication: initializes login (evidence: `main.py`)
- CLI & orchestration → Search & filtering: starts search (evidence: `main.py`)
- LinkedIn authentication → LinkedIn: authenticates
- Search & filtering → LinkedIn: searches listings
- Search & filtering → Job listing: creates listings (evidence: `src/ai_hawk/job_manager.py`)
- Search & filtering → Easy Apply handler: dispatches applications (evidence: `src/ai_hawk/job_manager.py`)
- Search & filtering → Browser utilities: scrolls results (evidence: `src/ai_hawk/job_manager.py`)
- Easy Apply handler → Application context: uses context (evidence: `src/ai_hawk/linkedIn_easy_applier.py`)
- Application context → Application record: holds application (evidence: `src/jobContext.py`)
- Easy Apply handler → AI answer generation: requests answers (evidence: `src/ai_hawk/linkedIn_easy_applier.py`)
- AI answer generation → Prompt templates: uses templates (evidence: `src/ai_hawk/llm/llm_manager.py`)
- AI answer generation → LLM providers: invokes model (evidence: `src/ai_hawk/llm/llm_manager.py`)
- Easy Apply handler → Tailored resume generation: requests tailoring (evidence: `src/ai_hawk/linkedIn_easy_applier.py`)
- Easy Apply handler → Application record: records answers (evidence: `src/ai_hawk/linkedIn_easy_applier.py`)
- Easy Apply handler → LinkedIn: submits form
- Easy Apply handler → Application archive: saves application (evidence: `src/ai_hawk/linkedIn_easy_applier.py`)
- Application archive → Application files: writes records (evidence: `src/job_application_saver.py`)
- Chrome setup → LinkedIn: opens browser
