Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/SudharakaA/ai-job-search/llms.txt

Use this file to discover all available pages before exploring further.

Most issues with the AI Job Search framework fall into a small number of categories: a missing optional dependency that degrades gracefully, a LaTeX engine mismatch that causes compilation to fail, or a stale configuration file left over from an older clone. The entries below cover every known issue with its cause and fix. If you encounter a problem not listed here, check the GitHub Issues tracker to see whether it has been reported or to file a new report.
Many of these issues produce a warning in Claude’s output rather than a hard failure. Read the Claude Code session output carefully — it often tells you exactly which dependency is missing and how to install it.

Known issues and fixes

Cause: The /apply workflow includes an optional salary benchmarking step that reads salary_data.json from the repository root. If you have not set up salary data, the file does not exist.Fix: This is expected behavior and not an error. The /apply workflow skips the salary benchmarking step automatically when the file is absent. Everything else in the workflow runs normally.If you want to enable salary benchmarking, create salary_data.json manually (see tools/README_SALARY_TOOL.md for the expected format), or convert an existing Excel file:
pip install openpyxl
python tools/convert_salary_excel.py path/to/salary-data.xlsx --source "My Salary Data 2025"
Cause: The CLI tools in .agents/skills/ are TypeScript programs that run with Bun. There are two common reasons they fail: Bun is not installed, or bun install has not been run in the CLI directory.Fix: First, verify that Bun is installed:
bun --version
If Bun is not installed, install it:
curl -fsSL https://bun.sh/install | bash
Then install dependencies for each tool from the repository root:
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search; do
  cd .agents/skills/$tool/cli && bun install && cd ../../../..
done
The CLI tools also require network access to fetch job listings. Make sure you are not behind a firewall or proxy that blocks the portal domains.
Cause: The CV and cover letter use different LaTeX engines. Using the wrong engine for either document causes compilation to fail.
  • The CV (cv/main_<company>.tex) must be compiled with lualatex. Using pdflatex often fails on modern MiKTeX installations with fontawesome5 font-expansion errors.
  • The cover letter (cover_letters/cover_<company>_<role>.tex) must be compiled with xelatex. The custom cover.cls class requires fontspec for its Lato and Raleway fonts, and fontspec is not available under pdflatex or lualatex.
Fix: Use the correct engine for each document:
# Compile the CV
cd cv && lualatex main_<company>.tex && cd ..

# Compile the cover letter
cd cover_letters && xelatex cover_<company>_<role>.tex && cd ..
Also make sure your LaTeX distribution includes the moderncv package. On TeX Live:
tlmgr install moderncv
On MiKTeX, the package manager installs missing packages automatically on first use if you have auto-install enabled.
Cause: The cover letter template (cover.cls) loads Lato and Raleway fonts using fontspec with a relative path: OpenFonts/fonts/. If the cover_letters/OpenFonts/fonts/ directory is missing or does not contain the font files, xelatex fails with a font-not-found error.Fix: Verify that the directory exists and contains the font files:
ls cover_letters/OpenFonts/fonts/
# Expected: lato/ and raleway/ subdirectories with .ttf or .otf files
If the directory is missing, the repository may not have been cloned completely. Re-clone or restore the fonts from the repository. The font files are committed to the repo and should be present after a fresh clone.
Cause: Earlier versions of this repository committed a .claude/settings.local.json file that pre-approved broad shell permissions (Bash(curl:*), Bash(python:*), Bash(bun:*)). The current version moves shared permissions to .claude/settings.json with tighter, scoped rules. If you cloned the repository before this change, Git leaves the old .claude/settings.local.json in your working copy, and its permissions continue to apply on top of the current settings.json.Fix: Delete the stale file:
rm .claude/settings.local.json
If you have personal permission overrides you want to keep, edit the file to remove only the old broad rules (Bash(curl:*), Bash(python:*), Bash(bun:*)) and leave your own additions intact.
Cause: The /apply workflow runs an ATS parseability check on the compiled CV using pdftotext from poppler. pdftotext is not part of standard TeX distributions and must be installed separately. If it is missing, the check cannot run.Fix: This is a graceful degradation, not a hard failure. When pdftotext is absent, /apply skips the mechanical ATS check with a warning and falls back to a visual keyword review from the rendered PDF. All other steps in the workflow run normally.To enable the full ATS check, install poppler:
brew install poppler
After installation, verify that pdftotext is on your PATH:
pdftotext -v
Cause: Profile depth is the single biggest factor in output quality. A thin profile (job titles only, short skill lists, no context about what you actually did) produces generic applications. The system can only tailor output based on what it knows about you.Fix: Invest more detail in your profile. The most impactful additions are:
  • Role descriptions with specifics: Instead of listing a job title, describe what you did in each role, the tools you used, the problems you solved, and any measurable achievements.
  • Skills in context: Instead of Python, write Built ML pipelines for customer churn prediction in Python using scikit-learn. This gives the system something concrete to reframe for different roles.
  • Behavioral and motivational context: During /setup, describe not just your experience but what energized you, what drained you, and what you want more of. This context shapes fit evaluation and role discovery.
You can update your profile at any time without rerunning the full setup:
/setup --section skills
/setup --section experience
Cause: The search queries used by /scrape are generated once during /setup based on your profile at that time. As your priorities evolve, the queries may no longer reflect the roles, locations, or skills you are currently targeting.Fix: Re-run the search configuration interview to update your queries without touching the rest of your profile:
/setup --section search
This re-runs the search configuration step: which roles to target, which skills to search for, which locations, and which portals. It also suggests role types you may not have considered based on your full profile.

General tips

Run /expand after /setup to surface skills from your GitHub repos, portfolio site, Kaggle profile, and named certifications. Skills discovered through public sources are added to your profile with a source tag, which strengthens tailoring without requiring manual input.
If Claude Code prompts you for permission to run a command that should already be allowed, check that .claude/settings.json is present and that you do not have a conflicting .claude/settings.local.json with older rules.

Build docs developers (and LLMs) love