AI Job Search: Claude Code Job Application Framework
AI Job Search is a Claude Code framework that scrapes job portals, scores fit, drafts a LaTeX CV and cover letter, then has a second agent critique the draft before you send it. Reach for it if you already run Claude Code daily and don't mind forking a repo and editing Markdown to describe your career. Skip it if you want a point-and-click SaaS or a market outside Denmark's four built-in portals without building your own scraper first.
Automating the Job Search Process
Tailoring a CV and cover letter for every posting, then re-checking that the exported PDF still reads correctly to an applicant tracking system, is the part of job hunting most people skip after the second application. AI Job Search targets that specific gap: it treats CV tailoring as a compile-and-verify step, not a one-time template fill. The workflow extracts the PDF's actual text layer with pdftotext and scores keyword coverage against it, because a LaTeX CV that looks fine on screen can still extract as garbled text to an ATS parser.
Understanding the AI Job Search Framework
AI Job Search is an open-source framework that turns Claude Code into a job application assistant: fork the repo, fill in your profile, and it evaluates postings, drafts a tailored CV and cover letter in LaTeX, and preps you for interviews. The core self-profiling and drafter-reviewer pipeline is language- and country-agnostic; the shipped job-portal search skills target the Danish market and are meant to be swapped for local boards.
Core Capabilities and Workflow Commands
- β/scrape searches the built-in job portals (Jobindex, Jobnet, Akademikernes Jobbank, Jobdanmark, LinkedIn, freehire.me), deduplicates results, and presents matches sorted by fit.
- β/rank batch-scores newly scraped postings against five fit-evaluation dimensions with parallel agents, flags deal-breakers and expired postings, and returns a ranked shortlist.
- β/apply runs a drafter-reviewer pipeline: it evaluates fit, drafts a LaTeX CV and cover letter, spawns a second Claude agent with fresh context to research the company and critique the draft, then revises.
- βA PDF verification loop compiles the CV with lualatex and the cover letter with xelatex, then Claude inspects the rendered pages and applies fixes until the CV is exactly 2 pages and the cover letter exactly 1.
- βDuring an ATS check, the compiled CV's PDF has its text layer extracted using pdftotext, and then contact details, reading order, and keyword coverage are verified as a parser would truly perceive them, distinct from the .tex source's appearance.
- β/interview builds a stage-specific prep pack from the tracked application's archive (the exact posting, CV, and cover letter the interviewer saw) and offers a mock interview mapped to your STAR examples.
- β/outcome archives submitted materials per application and updates job_search_tracker.csv; /outcome followup drafts (never auto-sends) a short follow-up for applications gone quiet after a default 10 days.
- β/add-portal scaffolds a new job-portal search skill for a market outside Denmark, and /add-template registers a custom CV or cover letter template in LaTeX, Typst, or another toolchain.
Practical Applications for Job Seekers
- β’A developer already living in Claude Code runs /scrape against the four Danish portals plus LinkedIn every week and picks matches to /apply against directly.
- β’A job seeker outside Denmark uses /add-portal to scaffold a search skill for their local job board before running the rest of the workflow unchanged.
- β’Before a scheduled interview, /interview pulls the exact CV, cover letter, and posting an interviewer read and runs a mock interview against your STAR examples.
- β’/upskill compares your profile against tracked and ranked-but-untracked postings to produce a prioritized skill-gap heatmap and study plan between application rounds.
- β’/html-report regenerates a self-contained offline dashboard from job_search_tracker.csv after each /outcome update, with status, sector, channel, and funnel charts.
Setting Up Your AI Job Search Environment
Install is documented in the README as three steps. First, fork and clone: `gh repo fork MadsLorentzen/ai-job-search --clone`. Second, install each job-portal CLI's dependencies by looping `bun install` over `.agents/skills/<tool>/cli` for jobbank-search, jobdanmark-search, jobindex-search, jobnet-search, linkedin-search, and freehire-search; the last two have zero runtime dependencies, so that step is optional for them. Third, run `claude` and then `/setup` inside Claude Code to build your profile. Beyond the repo itself you need: Claude Code CLI, Python 3.10+, Bun, and a LaTeX distribution with `lualatex` and `xelatex` (TeX Live, MacTeX, TinyTeX, or MiKTeX) β the CV compiles with lualatex because pdflatex often fails on modern MiKTeX with fontawesome5 errors, and the cover letter needs xelatex because cover.cls requires fontspec. `pdftotext` from poppler is optional; without it the ATS check just degrades to a visual keyword review.
Running the Job Application Workflow
Once your profile exists, the day-to-day loop is three commands. Run `/scrape` to search the configured portals and get matches sorted by fit β or pipe a large scrape through `/rank` first to get a ranked shortlist before eyeballing anything. Then run `/apply https://jobindex.dk/job/1234567` on a specific posting, or paste the job description directly if the portal blocks automated fetches. `/apply` evaluates fit, drafts the CV and cover letter, has a second agent critique the draft, revises, compiles and visually inspects both PDFs, runs the ATS text-layer check, and presents a verification checklist. Postings are treated as untrusted input β the workflow won't follow instructions embedded in a posting or fetch links from its body, though the README is explicit that this defense is instruction-level, not a sandbox, so you're told to skim an unfamiliar job board's output before sending. After an outcome, `/outcome` records it and `/interview` builds prep from the archived application.
Strengths
- βThe drafter-reviewer split ensures that a distinct Claude agent, initialized with a fresh context, investigates the company and assesses your CV and cover letter. This process occurs prior to your viewing the final draft, thereby avoiding the original agent merely re-reading its own output.
- βThe PDF verification loop catches the layout bugs that break most LaTeX resume templates: orphaned job titles, cover letters spilling to a second page, bullet fonts silently falling back to the body font.
- βThe ATS check reads the compiled PDF's actual text layer via pdftotext instead of assuming the .tex source is what a parser sees, and flags a keyword gap instead of stuffing it in.
- βRelevance-weighted CV cutting scores each bullet by relevance to the posting, uniqueness, and whether the cover letter depends on it, so an older but keyword-relevant line survives ahead of a recent generic one when the CV overflows two pages.
- βTen extension commands beyond the core three cover the rest of the job hunt β interview prep, outcome tracking, a Gmail status sync, a read-only Notion view, and skill-gap analysis β rather than stopping at CV generation.
Considerations and Current Scope
- β³The shipped portal search skills (Jobindex, Jobnet, Akademikernes Jobbank, Jobdanmark) only cover the Danish job market; anywhere else you're scaffolding your own with /add-portal before /scrape is useful to you.
- β³The LaTeX toolchain is a real prerequisite, not an optional nicety: you need lualatex and xelatex from a full or minimal TeX distribution installed and working before /apply can produce a PDF.
- β³The ATS parseability check depends on pdftotext from poppler; without it, the check silently degrades to a visual keyword review instead of reading the actual PDF text layer.
- β³Some job portals block automated URL fetches, so /apply sometimes needs the job description pasted in manually rather than fetched from a link.
- β³It's a single-author project built around the maintainer's own job search, not a maintained team product, so support and roadmap depend on one person.
Other AI-Powered Job Search Tools
Frequently Asked Questions
AI Job Search runs on Claude Code as its agent runtime; the commands and skills in the repo are Markdown instructions that Claude Code executes, and the README doesn't pin a specific Claude model version.
The README points users of other agent tools (Codex, Antigravity, Gemini CLI) to AGENTS.md, where the job-portal search skills work out of the box; the full workflow is adapted by community forks linked from a GitHub discussion.
AI Job Search is released under the MIT license, which permits commercial use. The README separately notes the project is not associated with any affiliated cryptocurrency or token, and it lacks a paid sponsorship program.
AI Job Search ships portal search skills for the Danish market (Jobindex, Jobnet, Akademikernes Jobbank, Jobdanmark) plus LinkedIn and freehire.me; the /add-portal command scaffolds a new skill for other job boards.
AI Job Search supports custom templates through the /add-template command, which registers a LaTeX, Typst, or other-toolchain template in place of the stock ones and runs a test compile before wiring it into /apply.
AI Job Search does not fabricate skills or experience: the README states every CV and cover letter claim is verified against your actual profile, and gaps get honest bridge answers during interview prep instead of invented experience.
Who should try it β and who should skip
Try AI Job Search if you already run Claude Code day to day, don't mind forking a repo and editing Markdown and LaTeX files to describe your career, and want the application pipeline scripted end to end rather than tailoring a CV by hand each time. Skip it if you want a hosted point-and-click product with no setup, you're applying outside Denmark and don't want to build a portal skill with /add-portal first, or you don't want to install a LaTeX distribution just to generate a resume.
