AI Job Search: Claude Code Framework for CVs, Cover Letters, and ATS Checks
MadsLorentzen/ai-job-search (12.9k GitHub stars) turns Claude Code into a full job-application assistant — /setup, /scrape, /apply with drafter-reviewer agents, LaTeX PDF verification, and ATS keyword parsing. Setup guide for 2026.
MadsLorentzen/ai-job-search is one of the fastest-growing Claude Code workflow repos in mid-2026: roughly 12.9k stars, 4.1k forks, MIT license. It is not an Anthropic product — the README states clearly it is independent — but it is a polished example of what custom slash commands and agent skills look like when aimed at a real-life outcome: getting hired.
Fork it, run /setup on your profile, /scrape job boards, /apply on a posting — and Claude evaluates fit, tailors a LaTeX CV and cover letter, spawns a reviewer agent, compiles PDFs, and ATS-checks the text layer before you submit.
Most "AI resume" tools generate a Markdown blob and call it done. ai-job-search encodes a multi-step agent workflow with verification gates:
snippet
/setup /scrape /apply <url>
| | |
v v v
Profile files Search portals Evaluate fit (5 dimensions)
ready Dedupe + sort Draft CV + cover letter (LaTeX)
by fit Reviewer agent critiques
| |
v v
/rank (optional) Compile PDFs → inspect layout
batch shortlist ATS text extract → keyword score
Present checklist → you submit
The design borrows from loop engineering thinking: structured phases, explicit handoffs, and a second agent that catches what the first pass misses — except the output is a job application, not a pull request.
gh repo fork MadsLorentzen/ai-job-search --clonecd ai-job-search
# Install Danish portal CLI tools (Bun)cd .agents/skills/jobbank-search/cli && bun install && cd ../../../..
cd .agents/skills/jobdanmark-search/cli && bun install && cd ../../../..
cd .agents/skills/jobindex-search/cli && bun install && cd ../../../..
cd .agents/skills/jobnet-search/cli && bun install && cd ../../../..
cd .agents/skills/linkedin-search/cli && bun install && cd ../../../..
If a portal blocks fetch, paste the full job description:
text
/apply <paste the full job description here>
Prerequisites worth calling out:
Dependency
Why
Claude Code CLI
Runs slash commands and spawns reviewer agents
Python 3.10+
Salary lookup and tooling
Bun
TypeScript CLIs for job portal search
LaTeX (lualatex, xelatex)
CV compiles with lualatex; cover letter needs xelatex + fontspec
pdftotext (optional)
ATS text-layer extraction — brew install poppler on macOS
The CV template is moderncv (banking style). Cover letters use a custom cover.cls with Lato/Raleway fonts bundled under cover_letters/OpenFonts/.
Command Reference: Beyond the Core Trio
Command
Purpose
/setup
Onboard profile — documents folder, CV paste, or interview
/scrape
Multi-portal search, dedupe, fit-sorted results
/rank
Batch-score scraped jobs in parallel; ranked shortlist with deal-breaker vetoes
/apply
Full drafter-reviewer pipeline + PDF + ATS
/outcome
Record interview stages, offers, rejections; archive to documents/applications/
/expand
Pull competencies from GitHub, portfolio, Kaggle, course syllabi
/upskill
Skill-gap heatmap + learning plan vs tracked postings
/add-template
Register your own LaTeX CV/cover template with test compile
/add-portal
Scaffold a job-board CLI skill for your local market
/reset
Wipe profile or documents (requires typing RESET)
/outcome closes the feedback loop: after a few resolved applications, it points you back to /setup to calibrate the fit framework from what actually got interviews — rare in hobby agent repos, valuable for forward-deployed career moves where targeting matters.
What Makes /apply Different
1. Drafter-reviewer separation
The drafter writes CV and cover letter. A second Claude agent — fresh context — researches the company and critiques drafts. The drafter revises. This mirrors production multi-agent patterns and catches generic framing single-pass tools miss.
Honesty rule: skills and experience are verified against your profile. The system does not fabricate credentials.
2. PDF verification loop
LaTeX resumes often look fine in source and break in PDF — orphaned job titles, cover letters spilling to page 2, icon fonts garbling contact fields. /applycompiles and visually inspects every PDF:
Fixes use \needspace, \enlargethispage, font-matching list wrappers
This is the difference between "AI wrote me a resume" and "AI wrote me a resume I can send."
3. ATS verification on the text layer
Applicant tracking systems read embedded PDF text, not the rendered page. LaTeX can produce beautiful PDFs that extract as garbage — icon glyphs where your email should be, scrambled multi-column order.
/apply runs pdftotext on the compiled CV and checks:
Contact details present as literal text
Sane reading order
Posting keyword coverage against the extraction
Keyword honesty: terms your profile genuinely supports get added; genuine gaps stay visible — never keyword-stuffed.
Recent commit fix(jobindex-search): decode hex HTML entities in CLI output (#56) shows the portal layer getting the same "what parsers actually see" treatment.
4. Relevance-weighted CV cutting
When a CV overflows two pages, the workflow does not cut mechanically from the oldest section. Each line is scored by:
Relevance to the target posting
Uniqueness in the document
Whether the cover letter depends on it
Lowest total score gets cut first — an older bullet that hits posting keywords survives ahead of a recent bullet that does not.
LinkedIn public guest endpoints (any location flag)
linkedin-search is the portable starting point: -l "Berlin, Germany", -l "Mumbai, Maharashtra, India", -l "Remote". Zero runtime deps beyond Bun. README warns: personal use only — LinkedIn ToS restricts automated access.
For other boards, run /add-portal with a URL. The command investigates search URL patterns, result structure, and robots.txt, scaffolds a CLI matching the shipped skill contract, and test-runs a live query before registering. Auth-walled portals are declined.
Profile Depth = Output Quality
The README is explicit: thin profile → generic applications. Rich profile → genuinely tailored output.
Best practices from the repo:
Describe what you actually did per role — projects, tools, measurable outcomes
Put skills in context ("built ML pipelines for churn prediction in Python/scikit-learn" beats "Python, ML")
Use /setup documents mode: drop CV PDF, LinkedIn export, diplomas, references into documents/ (see documents/README.md)
Re-run /setup --section search when priorities shift without redoing the full profile
/expand can enrich after setup by scanning GitHub repos, portfolio sites, Kaggle, Google Scholar, and course syllabi — competencies added with source tags.
Custom Templates and Salary Benchmarking
text
/add-template
Interviews you for compile engine, fonts, style rules, page limits; stores templates under templates/ with [PLACEHOLDER] tokens (safe to commit); runs mandatory test compile; wires into /apply.
/add-template --list / --use <name> / --use default switch between custom and stock moderncv templates.
salary_lookup.py accepts your own salary data (union stats, Glassdoor exports). No data → salary step skipped. See tools/README_SALARY_TOOL.md.
moderncv + fontawesome5 breaks on wrong engine; README mandates lualatex
Portal blocking
Some URLs need pasted descriptions
LinkedIn ToS
Automated search is against terms at volume
No releases
Repo has no published GitHub Releases — track main
2 open issues
Check GitHub Issues before depending on edge cases
This is a personal workflow framework, not HR-compliant hiring software. You remain responsible for factual accuracy in submitted materials.
How It Fits the Claude Code Ecosystem
ai-job-search demonstrates patterns worth stealing for any agent skill project:
Slash commands as product surface — /apply is the UX; SKILL.md files are the engine
Verification gates — compile, inspect, extract, score — not "here's text, good luck"
Subagent critique — reviewer with fresh context, not self-review
Market plugins — portal CLIs as swappable .agents/skills/ modules
Feedback loop — /outcome calibrates fit scoring from real results
If you already use Claude Code for coding, forking ai-job-search is a low-friction way to test the same toolchain on a non-code outcome — with LaTeX and ATS constraints that force rigor.
The Bottom Line
ai-job-search is the most complete open-source Claude Code job application framework available in July 2026: structured commands, drafter-reviewer agents, LaTeX PDF verification, and ATS keyword honesty — not another ChatGPT "write my resume" prompt.
Fork github.com/MadsLorentzen/ai-job-search, invest time in /setup, and treat /apply as a pipeline you iterate — not a one-shot generator. Use /rank when /scrape returns too many matches. Use /outcome so the system learns what actually worked.
Star counts, command set, and dependencies reflect the public repository at publication time. Verify README before installing portal CLIs or running /apply against live postings.