The job search that runs on your machine is the pitch for MadsLorentzen/ai-job-search — roughly 35.8k GitHub stars, 12.2k forks, MIT license. Fork it (or clone into a private repo), fill a structured profile, and Claude Code evaluates postings, tailors LaTeX CVs and cover letters, spawns a reviewer agent, compiles PDFs, and ATS-checks the text layer before you submit.
It is not Anthropic-official. It is also not a silver bullet: creator Mads Lorentzen reported 69 applications → 20 first interviews → one offer in his own 2025–2026 search — proof the workflow can work, not a promise it will for you in every market.
TL;DR — what job seekers ask first
| Question | Direct answer |
|---|---|
| Repo? | github.com/MadsLorentzen/ai-job-search |
| Core flow? | /setup → /scrape → /rank (optional) → /apply → /outcome |
| What's special? | Drafter-reviewer split + mandatory PDF compile loop + ATS keyword pass |
| Private data? | Use private clone, not public fork — /setup writes PII to tracked files |
| Denmark only? | Portal CLIs are Danish; linkedin-search + /add-portal elsewhere |
| Cost? | Framework free (MIT); you pay Claude Code / API usage |
| Honest ceiling? | Better materials ≠ offers in a frozen or referral-heavy market |

Does it actually work?
Lorentzen — a geophysicist whose role was cut in late 2025 — built this to run his search. He was upfront with employers about using it; he reports it often sparked technical conversation rather than counting against him. By June 2026 he started as an AI engineer.
That story matters for expectations, not marketing:
- Volume still required — 69 tailored applications is real work.
- Conversion is human — interviews depend on timing, team fit, and luck.
- Automation ≠ networking — no slash command replaces warm intros.
- Market regime matters — AI-engineer hiring in 2026 ≠ every sector or geography.
Use ai-job-search to compress drafting and QA time, not to skip judgment on whether a role is worth pursuing.
Architecture: local files, agent pipeline
/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 pattern mirrors loop engineering: explicit phases, handoffs, and a second agent with fresh context — applied to career outcomes, not pull requests.
Quick start: private clone → portal CLIs → /setup
1. Clone privately (recommended for job seekers)
Public forks expose profile data. From SETUP.md section 8:
git clone https://github.com/MadsLorentzen/ai-job-search.git my-job-search
cd my-job-search
git remote rename origin upstream
# Create empty private repo on GitHub, then:
git remote add origin git@github.com:YOU/my-job-search.git
git push -u origin master
Fork publicly only when contributing upstream.
2. Install job portal CLI tools (Bun)
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do
(cd .agents/skills/$tool/cli && bun install)
done
linkedin-search and freehire-search run with plain bun — zero runtime deps; install pulls TypeScript dev types only.
3. Profile setup inside Claude Code
claude
/setup
Three paths: read populated documents/ (CV PDF, LinkedIn export, diplomas), paste a single CV, or interview walkthrough. Re-run safely as you add material — see documents/README.md.
4. Search and apply
/scrape
/rank
/apply https://jobindex.dk/job/1234567
Blocked URL? Paste the full description:
/apply <paste the full job description here>
Postings are untrusted input — the workflow ignores embedded instructions and does not follow links from posting bodies. Skim fetched content before send; see SECURITY.md.
Prerequisites
| Dependency | Why |
|---|---|
| Claude Code CLI | Slash commands + reviewer subagents |
| Python 3.10+ | Salary tooling and scripts |
| Bun | TypeScript portal CLIs |
LaTeX (lualatex, xelatex) | CV + cover letter PDF compile |
| pdftotext (optional) | ATS text-layer extraction — brew install poppler on macOS |
CV uses moderncv banking style. Cover letters use custom cover.cls with Lato/Raleway fonts under cover_letters/OpenFonts/.
Command reference beyond the core trio
| Command | Purpose |
|---|---|
/setup | Onboard profile — documents, CV paste, or interview |
/scrape | Multi-portal search, dedupe, fit-sorted results |
/rank | Parallel batch scoring; deal-breaker vetoes; hands off to /apply |
/apply | Drafter-reviewer + PDF + ATS pipeline |
/interview | Stage-specific prep from archived materials + mock interview |
/outcome | Record stages; archive CV/cover/posting; calibrate fit over time |
/expand | Enrich profile from GitHub, portfolio, Kaggle, syllabi |
/upskill | Skill-gap heatmap vs tracked postings |
/gmail-sync | Propose status updates from Gmail (batch approval) |
/notion-sync | Read-only pipeline view in Notion via MCP |
/add-template | Register custom LaTeX/Typst templates with test compile |
/add-portal | Scaffold a job-board CLI for your market |
/reset | Wipe profile or documents (type RESET to confirm) |
/outcome followup surfaces quiet applications and drafts channel-appropriate follow-ups — drafts only, never sends.
What makes /apply different
Drafter-reviewer separation
The drafter writes; a second Claude agent researches the company and critiques. Claims stay tied to your profile — no fabricated skills.
PDF verification loop
/apply compiles and visually inspects PDFs:
- CV: exactly 2 pages, no orphaned entry titles
- Cover letter: exactly 1 page, signature visible
- Fixes via
\needspace,\enlargethispage, font-matching list wrappers
ATS verification on the text layer
pdftotext extracts embedded text — contact fields as literal strings, sane reading order, keyword coverage without stuffing gaps your profile does not support.
Relevance-weighted CV cutting
Overflow lines are scored by posting relevance, uniqueness, and cover-letter dependency — not naive "delete oldest job first."
Job portals: Denmark shipped, everywhere extensible
| Skill | Portal / scope |
|---|---|
jobindex-search | Jobindex.dk |
jobnet-search | Jobnet.dk (government) |
jobbank-search | Akademikernes Jobbank |
jobdanmark-search | Jobdanmark.dk |
linkedin-search | Guest endpoints — -l "Berlin, Germany", -l "Remote" (personal use only) |
freehire-search | freehire.me REST API — tech roles, multi-market |
Run /add-portal with a board URL to scaffold a matching CLI. Auth-walled portals are declined.
Profile depth = output quality
Thin profile → generic applications. The README is explicit:
- Describe projects and measurable outcomes per role, not titles alone
- Put skills in context ("built churn ML pipelines in Python/scikit-learn" beats "Python, ML")
- Use
/expandafter/setupto surface competencies from public repos - Re-run
/setup --section searchwhen targeting shifts
Honest limits and hiring-market caveats
| Limit | Reality check |
|---|---|
| Not affiliated with Anthropic | You bring your own Claude Code subscription and accept model behavior |
| Token cost | /apply, /rank, and reviewer runs add up — budget like any agent workflow |
| LaTeX fragility | Wrong engine breaks moderncv/fontawesome5; follow README engine rules |
| Portal blocking | Some URLs need pasted descriptions; robots and rate limits vary |
| LinkedIn ToS | Automated search is against terms at volume — keep personal, low frequency |
| Instruction-level security | Not a sandbox; review materials before submit |
| Market headwinds | Layoffs, visa screens, and "posted but frozen" roles still waste cycles |
| No crypto affiliation | README warns scams claiming token sponsorship — only Ko-fi + GitHub are official |
Scam note: README states there is no affiliated cryptocurrency or paid sponsorship program.
This is a personal workflow framework, not HR-compliant hiring software. Accuracy and ethics remain yours — relevant if you touch AI and employment law themes.
Staying current with upstream
Track tagged releases in CHANGELOG.md rather than blind merges:
python3 tools/check_upstream_updates.py
python3 tools/upstream_triage.py
Full walkthrough in SETUP.md section 8.
The bottom line
ai-job-search is the most complete local, fork-and-own Claude Code career framework in August 2026: structured commands, verifier agents, LaTeX discipline, and outcome tracking — closer to a useful agent build than a one-shot resume prompt.
Clone github.com/MadsLorentzen/ai-job-search into a private repo, invest in /setup, treat /apply as a pipeline you iterate, and use /outcome so fit scoring learns from real results. Expect better PDFs and faster tailoring — not automatic offers.
Related on explainx.ai
- Build Useful AI Agents with Claude Code — smaller job shortlist agent pattern
- Claude Code Commands: Complete Reference — slash commands and custom skills
- What Are Agent Skills? — SKILL.md packages ai-job-search extends
- Loop Engineering with Claude Code — phased agent workflows
- Top 10 AI Agent Skills Directories — skills ecosystem context
- npx skills Install Guide — installing portal skills
- Forward Deployed Roles and the Future of Work — targeting non-obvious paths
- Sam Altman and Dario Amodei on AI Jobs — macro context for expectations
Source: MadsLorentzen/ai-job-search on GitHub (MIT; README and SETUP.md as of August 26, 2026).
Star counts, command set, and creator funnel stats reflect the public repository at publication time. Verify README before installing portal CLIs or submitting live applications.
