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.
TL;DR: What People Are Asking
| Question | Answer |
|---|---|
| Free? | Framework is MIT; you pay Claude Code/API usage |
| Core commands? | /setup → /scrape → /apply (+ /rank to triage) |
| What's special? | Drafter-reviewer split + mandatory PDF compile loop + ATS keyword pass |
| Denmark only? | Portal CLIs are Danish; LinkedIn search + /add-portal for other markets |
| Prerequisites? | Claude Code, Python 3.10+, Bun, LaTeX (lualatex + xelatex) |
| Recent updates? | /outcome tracking, ATS keyword verification, hex HTML entity fix in Jobindex CLI |
| Stars / forks? | ~12.9k / ~4.1k (July 2026) |
What It Actually Does
Most "AI resume" tools generate a Markdown blob and call it done. ai-job-search encodes a multi-step agent workflow with verification gates:
/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.
Quick Start (Fork → Apply)
From the official README:
gh repo fork MadsLorentzen/ai-job-search --clone
cd 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 ../../../..
Then inside Claude Code:
/setup
/scrape
/apply https://jobindex.dk/job/1234567
If a portal blocks fetch, paste the full job description:
/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. /apply compiles and visually inspects every PDF:
- CV: exactly 2 pages, no orphaned entry titles
- Cover letter: exactly 1 page, signature visible, consistent fonts
- 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.
Job Search Tools: Denmark Shipped, Everywhere Extensible
Shipped portal skills under .agents/skills/:
| Skill | Portal |
|---|---|
jobindex-search | Jobindex.dk |
jobnet-search | Jobnet.dk (government) |
jobbank-search | Akademikernes Jobbank |
jobdanmark-search | Jobdanmark.dk |
linkedin-search | 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
/setupdocuments mode: drop CV PDF, LinkedIn export, diplomas, references intodocuments/(seedocuments/README.md) - Re-run
/setup --section searchwhen 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
/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.
Limitations and Risks
| Issue | Detail |
|---|---|
| Claude cost | /apply + reviewer + /rank parallel agents consume tokens |
| LaTeX fragility | 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 —
/applyis 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 —
/outcomecalibrates 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.
Related on explainx.ai
- Claude Code Commands: Complete Reference — built-in slash commands + custom skills
- Top 10 AI Agent Skills Directories — where SKILL.md packages live
- Loop Engineering with Claude Code — structured agent phases
- What Are AI Agents? Complete Guide — drafter-reviewer pattern explained
- Forward Deployed Roles and the Future of Work — targeting non-obvious career paths
- Claude Code MCP Servers — extending the toolchain
- npx skills Install Guide — installing skills from registries
- AI and the Law: Contracts and Liability — accuracy obligations in applications
Source: MadsLorentzen/ai-job-search on GitHub (MIT, README and SETUP.md as of July 8, 2026).
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.
