Overview
What it does
Job hunting at scale is repetitive and time-consuming. This agent automates the mechanical parts: finding listings, filtering noise, tailoring application materials, and submitting forms, while keeping a human in the loop for edge cases and borderline fits.
The core design is a configurable threshold gate. The agent applies automatically above a high-confidence score, flags listings for manual review in the middle band, and silently skips poor fits. Nothing gets submitted without clearing the bar.
How It Works
Four-stage pipeline
1. Search
Scrapes configured job boards (Indeed, Glassdoor, and others) using JobSpy. Each listing ID is stored in a local SQLite database so no listing is ever processed twice. Listings matching any excluded keyword are dropped before analysis.
2. Analyse
Each new listing is sent to a locally running Ollama model alongside the candidate's master resume. The model returns a fit score (0-100), a rationale, identified gaps, rewritten resume bullets, and a tailored cover letter.
3. Gate
Scores below the review threshold are skipped. Scores in the middle band are flagged with the listing URL for manual action. Scores at or above the auto-apply threshold proceed to submission.
4. Apply
Playwright fills and submits application forms on Greenhouse and Lever portals. Unsupported portals (LinkedIn Easy Apply, Workday) are flagged for manual action rather than attempted with fragile heuristics.
Design Decisions
Key choices that matter
- Local LLM via Ollama: no API key, no cost, no data leaving the machine
- SQLite deduplication: stateful across runs without a database server
- Threshold gate: automation only where confidence is high; humans handle the rest
- Portal-specific handlers: explicit support per ATS rather than brittle generic selectors
- Dry-run mode: search and analyse without submitting any applications
Stack
Tools involved
- Python 3.12
- uv
- JobSpy
- Ollama / Llama 3.2
- Playwright
- SQLite
- Rich