JobSearch Agent
Overview
JobSearch is an AI-powered CLI tool that automates the most time-consuming parts of job hunting: researching positions, filtering opportunities, and writing cover letters. It leverages Claude AI to find relevant jobs via web search, intelligently filter them based on your background, and generate tailored cover letters as professional PDFs.
The project was born out of personal necessity. After spending hours manually searching job boards, reading through irrelevant postings, and crafting individual cover letters, I realized most of this could be automated with modern AI capabilities. The result is a tool that can search, filter, and prepare applications in minutes rather than hours.
Key Features
AI-Powered Job Search
The tool generates optimized search queries combining your desired job titles, locations, and relevant keywords, then executes them via Claude's web search capabilities. Results are automatically deduplicated and enriched with full job descriptions scraped from the posting URLs.
"data scientist" remote Spain hiring 2025
"ML engineer" remote worldwide work from anywhere
"machine learning" "Python" Barcelona full-time
"senior data analyst" Europe remote-firstIntelligent Filtering
Not every job posting is a good fit. The tool uses Claude to analyze each job description against your professional background and automatically filters out unsuitable positions. This means you only spend time reviewing jobs where you're actually a competitive candidate.
Profile Building
The system builds a comprehensive professional profile by parsing multiple document formats (PDF, DOCX, LaTeX, even Excel) and fetching your online presence from LinkedIn, GitHub, and personal websites. This rich profile powers both the filtering and cover letter generation.
# Document parsing via python-docx, pypdf, openpyxl
- PDF (resumes, certificates)
- Word documents (CV, cover letters)
- LaTeX files (academic CVs)
- Excel/CSV (project lists, skills matrices)
- HTML/JSON (portfolio exports)Cover Letter Generation
This is where the tool really shines. Rather than using a generic template, it follows a multi-step process to create genuinely personalized cover letters:
- Analyze the job description to identify key topics and requirements
- Map your experience to those specific topics
- Select the 3-5 strongest matches where your background is most relevant
- Generate a tailored cover letter body (3-4 paragraphs)
- Compile to PDF using LaTeX for professional formatting
The system is specifically prompted to avoid common AI writing patterns, producing letters that read authentically rather than obviously machine-generated.
Architecture
The project is structured as a modular Python CLI application with clear separation of concerns:
jobsearch/
├── main.py # Entry point, CLI argument parsing
├── cli_menus.py # Interactive menu system
├── search_jobs.py # Job search orchestration
├── cover_letter_writer.py # LaTeX PDF generation
├── online_presence.py # LinkedIn/GitHub scraping
├── utils.py # Claude API wrapper, document parsing
├── cli_utils.py # Terminal formatting, colors
└── data_handlers/
├── user_data.py # Profile management
├── jobs_data.py # Job storage & tracking
└── query_data.py # Search query managementData Storage
All user data is stored locally in ~/.JobSearch/<user_id>/, with JSON files for structured data and CSV for search query tracking:
~/.JobSearch/joshua/
├── user_info.json # Profile, preferences, AI-generated summaries
├── jobs.json # Job postings with metadata and status
├── search_queries.csv # Generated search queries
├── search_query_results.csv # Query execution history
└── cover_letters/ # Generated PDF cover lettersMulti-User Support
The tool supports multiple user profiles via the -u flag, making it useful for career coaches or households where multiple people are job hunting.
Workflow
The CLI follows a structured menu system that guides users through the job search process:
START → New User? → SETUP (profile configuration)
↓
MAIN MENU
├─ User Info (edit profile, refresh documents)
├─ Search for Jobs (execute queries, filter results)
├─ View/Manage Jobs
│ └─ Job Detail
│ ├─ Mark as applied
│ ├─ Generate cover letter
│ └─ Export PDF
├─ Settings
└─ ExitJob Search Pipeline
When searching for jobs, the system executes a multi-phase pipeline:
- Query Execution: Run search queries via Claude web search
- Result Extraction: Parse job info (company, title, link, snippet)
- Description Scraping: Fetch full job descriptions from posting URLs
- Deduplication: Remove duplicate postings by URL
- AI Filtering: Assess fit based on candidate background
- Storage: Save results with metadata for tracking
Technology Stack
| Category | Technologies |
|---|---|
| CLI Interface | InquirerPy (interactive prompts) |
| Document Parsing | python-docx, pypdf, openpyxl |
| Web Scraping | BeautifulSoup4, lxml |
| PDF Generation | LaTeX (pdflatex) |
| AI Backend | Claude CLI (with web search) |
Usage
# Install dependencies
pip install inquirerpy python-docx pypdf openpyxl beautifulsoup4 lxml
# Ensure Claude CLI is installed and authenticated
claude --version
# Run the tool
python -m jobsearch
# Or with a specific user profile
python -m jobsearch -u usernameOn first run, the setup wizard guides you through configuring your profile: personal information, professional credentials, online presence links, source documents, desired job titles, and preferred locations. The system then generates a comprehensive professional summary using AI.
Summary
- AI-powered job search via Claude web search
- Intelligent filtering based on candidate background
- Multi-format document parsing (PDF, DOCX, LaTeX, Excel)
- LinkedIn/GitHub profile integration
- Personalized cover letter generation with LaTeX PDF output
- Local data storage with multi-user support
- Beautiful terminal UI with interactive menus