Overview
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 principle 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
- Search
- Scrapes configured job boards (Indeed, Glassdoor, and others) using JobSpy. Each listing's ID is stored in a local SQLite database so no listing is ever processed twice. Listings matching any excluded keyword are dropped before analysis.
- Analyze
- 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, resume bullets rewritten to mirror the job description's language, and a tailored cover letter.
- 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 the apply layer.
- Apply
- Playwright fills and submits application forms on Greenhouse and Lever portals. Any portal that is not supported (including LinkedIn Easy Apply and Workday) is flagged for manual action rather than attempted with fragile heuristics.
Key Design Decisions
- 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 analyze without submitting any applications.
Stack
- Python 3.12 with uv
- JobSpy (job board scraping)
- Ollama with Llama 3.2 (local LLM inference)
- Playwright (browser automation)
- SQLite (deduplication store)
- Rich (terminal output)