Skip to content

devesssi/automated_job_agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Autonomous AI Job Application Agent

A resilient, form-agnostic, and context-aware AI agent designed to autonomously navigate any Applicant Tracking System (ATS), tailor high-fidelity professional documents, and fill complex application forms using a multi-step semantic reasoning engine.


🚀 How to Run the Demo

Prerequisites

  • Python 3.10+
  • OpenAI API Key

1. Installation

Clone the repository and install the required dependencies:

pip install -r requirements.txt
playwright install chromium

2. Environment Setup

Create a .env file in the root directory:

OPENAI_API_KEY=your_openai_api_key_here

3. Initialize the Candidate Database

The system uses a persistent SQLite database. Seed it with your professional profile:

python seed.py

Tip

Modify seed.py to change the candidate's experience, skills, and custom answers (e.g., Visa sponsorship, Salary expectations).

4. Execute the Agent

Start the agent and provide the Job Application URL when prompted:

python main.py

Note

The agent is now fully dynamic. You can input any job site (Ashby, Zoho, GlobalLogic, Oracle Cloud, etc.) in real-time.


🗄️ Candidate Database Structure

Core Models

  • Candidate: Stores primary PII (Name, Email, Socials) and structured JSON fields for Experience and Education.
  • CustomAnswer: A polymorphic key-value store used to cache "Standard Answers" to non-standard questions (e.g., "Are you authorized to work in India?").

Extending the DB

To add a new "Global" answer for the agent to use:

  1. Open seed.py.
  2. Add a new key-value pair to CUSTOM_ANSWERS (e.g., "preferred_working_model": "Remote").
  3. Re-run python seed.py to sync the change.

🕵️ ATS Detection & Form Agnosticism

The agent does NOT rely on hardcoded site lists. It uses a Semantic Discovery Loop located in utils/ats_parser.py:

  1. Pattern Matching: Scans the URL and the DOM for "Signatures" (e.g., .ashbyhq.com, lever-job-container).
  2. Intent Discovery: If no standard ATS is detected, the agent identifies the "Dominant CTA" (e.g., Click "Apply for this position" if inputs are missing).
  3. Skeleton Scraping: The DOM is minified into a "Semantic Map" that ignores styling and noise, allowing the LLM to see only the high-intent input fields.

🧠 Form Field Mapping Engine

Mapping follows a strict 4-Step Hierarchy to ensure accuracy and speed:

  1. Deterministic Match: Checks the base Candidate profile for common fields (First Name, LinkedIn).
  2. Custom Answer Cache: Interrogates the CustomAnswer table for semantic matches (Notice Period, Referral).
  3. LLM Inference (Step 3): Unresolved fields are batched into a single prompt to GPT-4o. The LLM infers the best answer based on the candidate's career summary.
  4. Logging: All mapping decisions are logged to the terminal and stored in the application_state to track what the "Robot is typing."

🤝 Human-in-the-Loop (HITL) Workflow

When the AI encounters ambiguity or high-security barriers, it surrenders control to you.

HITL Triggers

  • CAPTCHA: Detected automatically; the agent pauses and notifies you to solve it in the browser.
  • Missing Mandatory Data: If the AI cannot find an answer in your DB for a required field (*).
  • Sensitive Info: SSN or Security Clearances.

⏳ The 30-Second Timeout

The hitl.py node uses an asyncio.wait_for race condition.

  • You have 30 seconds to provide an answer in the terminal.
  • Backlog System: If you leave it blank or don't respond, the agent marks the job as BACKLOG and saves the partially filled form state. This prevents the browser from idling forever.

📈 Scalability Roadmap

To scale this to thousands of applications and multiple users:

  1. Job Queue Infrastructure: Wrap the core graph in FastAPI and use Celery + Redis to handle concurrent task processing.
  2. Headless Browser Farms: Deploy the agent in Docker containers. Use Playwright Browser Contexts to isolate sessions, allowing one server to handle hundreds of applicants simultaneously.
  3. Vector DB Integration: Move Candidate Experience to a Vector DB (ChromaDB/Pinecone) to RAG-retrieve only relevant bullet points for document tailoring, saving thousands in token costs.
  4. Proxy Rotation: Integrate Bright Data or Apify proxy networks to avoid ATS rate-limiting on high-frequency application bursts.

🎥 Demo Video

Important

Check the /output folder for generated PDFs (Resume/Cover Letter) after a run.

▶️ Watch the Full Demo

Watch the Demo on Loom

🔗 Loom Recording: https://www.loom.com/share/ceb7de670e9e48b0b2b5a78a4f2c87b3

The recording demonstrates a complete end-to-end run — including autonomous navigation, ATS detection, resume/cover letter generation, and dynamic form filling.


🔗 Repository

GitHub

🔗 Source Code: github.com/devesssi/automated_job_agent

About

Autonomous AI Job Application Agent

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages