AI Job Search Dependencies: Complete Setup Guide for MadsLorentzen/ai-job-search
The ai-job-search project requires Python 3.10+, Bun for JavaScript tooling, a LaTeX distribution with lualatex/xelatex, and optional poppler-utils for PDF text extraction, alongside minimal Python packages including openpyxl and PyYAML.
The MadsLorentzen/ai-job-search repository orchestrates a multi-runtime workflow that combines Python scripts, TypeScript CLI tools, and LaTeX document generation to automate job searching with AI assistance. Understanding the ai-job-search dependencies is essential for running the end-to-end pipeline from salary benchmarking to PDF generation. The project deliberately maintains a minimal install surface, relying primarily on standard library functionality augmented by specific tools for Excel processing, YAML parsing, and document compilation.
Core Python Runtime and Libraries
The foundation of the project rests on Python 3.10+, utilizing primarily the standard library to minimize third-party dependencies. Only two external Python packages are required for specific utility functions located in the tools/ directory.
openpyxl for Excel Processing
The tools/convert_salary_excel.py script depends on openpyxl to read salary spreadsheets and export JSON structures for the benchmarking tool. This conversion enables the salary_lookup.py workflow to process compensation data without manual data entry.
# Convert an Excel workbook containing salary tables into JSON format
# Source: tools/convert_salary_excel.py
from tools.convert_salary_excel import convert_excel_to_json
json_data = convert_excel_to_json("data/salaries.xlsx")
print(json_data) # Outputs JSON string for salary_lookup consumption
Install via: pip install openpyxl
PyYAML for Configuration Linting
The tools/lint_skills.py utility requires PyYAML to parse and validate Claude Code skill definitions stored in .claude/skills/ and command specifications. This ensures the AI agent configurations remain syntactically valid before execution.
# Validate all .claude/ skills, commands, and settings
python -m tools.lint_skills
Install via: pip install pyyaml
JavaScript Runtime with Bun
The portal-search CLI tools located in .agents/skills/* (including jobindex-search and linkedin-search) are written in TypeScript and executed using Bun. These tools handle job portal scraping and search automation independently of the Python core.
# Example installation for the Jobindex portal tool
# Navigate to any .agents/skills/*/cli directory
cd .agents/skills/jobindex-search/cli
bun install # Pulls TypeScript dependencies and builds the executable
Unlike Node.js-based projects, these tools specifically target Bun as their runtime environment. The installation process compiles TypeScript sources into executable binaries without requiring global npm packages.
LaTeX Toolchain for Document Generation
PDF generation for CVs and cover letters requires a complete LaTeX distribution (TeX Live, MacTeX, TinyTeX, or MiKTeX) with lualatex and xelatex engines. The cv/main_example.tex template uses the moderncv class, while cover_letters/cover.cls provides a custom document class for application letters.
# Compile the CV template (executed from cv/ directory)
lualatex main_example.tex # Produces main_example.pdf
The LaTeX workflow is not merely decorative; it produces PDF output that is subsequently inspected and ATS-checked as part of the application pipeline. Both lualatex and xelatex support are required to handle different document classes within the repository.
Optional but Recommended Dependencies
Two additional tools enhance functionality without blocking core workflows.
poppler-utils for PDF Verification
The optional poppler-utils package provides pdftotext for extracting text layers from generated PDFs. This enables the /apply command to verify ATS readability by inspecting the PDF text content. According to the README prerequisites, the workflow degrades gracefully if this dependency is missing, though automated text verification becomes unavailable.
Claude Code CLI
While not a library dependency installable via package managers, Claude Code serves as the required external service that evaluates job postings, drafts CVs and cover letters, and manages interview preparation workflows. This AI agent integrates with the local tooling but operates as a separate CLI application.
Summary
- Python 3.10+ with openpyxl and PyYAML handles Excel conversion, skill linting, and core scripting in
tools/convert_salary_excel.pyandtools/lint_skills.py. - Bun executes the TypeScript-based portal search tools located in
.agents/skills/*/clidirectories. - LaTeX distributions (TeX Live/MacTeX/TinyTeX/MiKTeX) with
lualatexandxelatexcompilecv/main_example.texandcover_letters/cover.clsinto PDF application materials. - poppler-utils optionally enables PDF text extraction for ATS verification via
pdftotext. - Claude Code operates as the central AI agent coordinating the entire workflow.
Frequently Asked Questions
Do I need Node.js if I already have Bun installed?
No. The ai-job-search project specifically targets Bun as its JavaScript runtime for the .agents/skills/* CLI tools. While Bun maintains compatibility with Node.js APIs, the installation and execution workflows assume bun install and bun run commands rather than npm or node.
Can I use Python 3.9 instead of Python 3.10?
The README specifies Python 3.10+ as a prerequisite. While some scripts may function on 3.9, the project relies on language features and standard library modules introduced in 3.10 for the Claude Code integration and type hinting used throughout tools/*.py.
Why does the project limit third-party Python packages?
The repository intentionally restricts Python dependencies to openpyxl and PyYAML to minimize the install surface and reduce supply chain attack vectors. Most functionality leverages the Python standard library, with heavier processing (such as web scraping) offloaded to the Bun-based TypeScript tools rather than Python libraries like Selenium or Playwright.
Is poppler-utils required for generating job applications?
No. poppler-utils is optional. It enables the /apply command to extract and verify PDF text layers for ATS compatibility using pdftotext. Without it, the workflow continues but skips the automated text extraction verification step, requiring manual inspection of generated PDFs instead.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →