An automated pipeline that searches for jobs, evaluates your fit using local LLMs (Ollama), tailors your resume, drafts referral messages, and helps automate the application process.
- Python 3.8+
- Ollama: You need to have Ollama installed locally to run the AI models. Download it from ollama.com.
- Google Chrome / Chromium: Required for the LinkedIn automation scripts.
-
Clone the repository (if you haven't already):
git clone <your-repo-url> cd <your-repo-directory>
-
Set up a Python virtual environment (recommended):
python -m venv venv source venv/bin/activate # On Windows use: venv\Scripts\activate
-
Install required dependencies:
pip install python-jobspy ollama pypdf python-docx pandas playwright openpyxl
-
Install Playwright browsers:
playwright install chromium
-
Download the local AI model: By default, the script uses
gemma4:12b-mlx. You need to pull this model (or change theMODEL_NAMEinai_hiring_manager.pyto a model you have, likellama3orgemma:7b).ollama pull gemma:7b # (Or whichever model you configure) -
Add your personal files: Place your base resume in the root directory.
Before running the tools, you should customize the scripts to match your job search preferences:
In ai_hiring_manager.py:
Open the file and modify the CONFIGURATION section at the top:
SEARCH_KEYWORDS: A list of job titles or keywords you are looking for (e.g., "Software Engineer", "Backend Developer").LOCATION: Your target job location (e.g., "Bengaluru, India" or "Remote").MODEL_NAME: Ensure this matches the Ollama model you pulled (e.g.,"gemma:7b").RESUME_PATH: Update this to the exact filename of your base resume (e.g.,"my_resume.pdf").
In linkedin_bot.py:
- Ensure
INPUT_FILEpoints to the tracker generated by the scripts (defaults to'job_tracker.xlsx').
Running a large batch job locally on an M3 Pro MacBook (using gemma:7b or similar models via MLX) yields impressive processing times:
- Scraping & Pre-filtering: ~1-2 minutes for several hundred listings across multiple keywords.
- LLM Evaluation & Tailoring: ~4-8 seconds per job depending on the description length.
- Full Run (e.g., 800+ jobs): Can be fully processed (evaluating fit, extracting metrics, rendering PDFs) in roughly 1-1.5 hours completely offline.
Run the main AI hiring manager. This script scrapes jobs using JobSpy, evaluates them using your local Ollama model, and generates tailored resumes and referral messages in the tailored_applications/ folder.
python ai_hiring_manager.pyNote: You can configure the search keywords, location, and parameters at the top of ai_hiring_manager.py.
Once you have tailored applications generated, run the tracker script to parse the results into an Excel spreadsheet (Job_Application_Tracker.xlsx) for easy tracking and access to links/messages.
python src/generate_tracker.pyIf you want to automate applying or messaging on LinkedIn based on the generated tracker:
python linkedin_bot.pyNote: The first time you run this, it will open a browser window and pause. You must log in to LinkedIn manually in that window, then press Enter in the terminal to continue the automation. Your session is saved locally in browser_session/ for future runs.
ai_hiring_manager.py: Scrapes jobs and uses Ollama to evaluate and tailor applications.linkedin_bot.py: Playwright script to automate actions on LinkedIn.src/generate_tracker.py: Parses AI outputs to create a tracking spreadsheet.tailored_applications/(gitignored): Output directory for tailored resumes and job analyses.browser_session/(gitignored): Caches your LinkedIn login session.
This repository contains a .gitignore specifically designed to exclude your personal resumes, generated tailored applications, job trackers, and browser sessions so you can safely push this code to GitHub without leaking personal data.