# MadsLorentzen/ai-job-search: a Claude Code workflow for job applications that runs on your own machine

> A forkable Python and LaTeX framework that turns Claude Code into a job application pipeline: portal scraping, fit scoring, tailored CVs, cover letters and interview prep. The Danish job boards are the default, and your personal data lands in tracked files unless you plan around it.

**MadsLorentzen/ai-job-search** — The job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.

- Repository: https://github.com/MadsLorentzen/ai-job-search
- Stars: 44,451 · Forks: 15,312
- Language: Python
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/madslorentzen-ai-job-search

## What ai-job-search solves, and who it is actually for

Job applications are repetitive in a specific way. The same facts get rephrased for every posting, and the evaluation of whether a posting is worth applying to is done by hand, usually late at night. ai-job-search moves that loop into Claude Code. The README describes it as "a structured workflow that turns Claude Code into a full-stack job application assistant", with commands for profiling, scraping, applying and interview preparation.

The intended user is narrow. You need Claude Code installed, Python 3.10 or newer, Bun for the search CLI tools, and a LaTeX distribution with lualatex and xelatex. That is a real toolchain, not a web form. The payoff is that the whole thing lives in a repository you own. The author states he built it during his own job search after his position was cut in late 2025, and that the same /scrape, /apply and /interview workflow in the repo was used weekly on his own career. That is the origin story, not an independent evaluation, and the README is upfront about it.

The core workflow is described as language- and country-agnostic: self-profiling, fit evaluation, and a drafter-reviewer application pipeline. The portal search skills are not. They are built for the Danish market, naming Jobindex, Jobnet, Akademikernes Jobbank and others. If you are searching outside Denmark, you are adopting a pattern and writing your own adapters, not getting a working scraper.

## How the pipeline moves from a posting to a tailored application

The README diagram shows three entry points that converge. /setup fills in your profile and writes profile files. /scrape searches job portals and presents matches with fit ratings. /apply takes a URL, evaluates fit, scores and recommends, then drafts a CV and cover letter in LaTeX, tailored to that posting.

The part worth noting is the reviewer step. After the draft, a separate reviewer agent critiques the output, and the loop is revise then final output. That is a two-agent pattern rather than a single generation pass. It does not guarantee quality, but it does mean the drafting prompt is not the last word on the document.

The framework also encodes what the README calls career guidance best practices: structured evaluation criteria, forward-looking cover letter framing, and optional salary benchmarking. There is a salary_lookup.py at the repository root, and directories for company_research, cover_letters, cv, job_scraper, templates, tools and upskill. The layout suggests generated artifacts are kept in the repo alongside the templates that produce them, which is convenient for diffing versions of your own CV over time.

One detail from the release notes matters for anyone with many postings: v1.7.1 is titled "Cheaper ranking, portals that fail loudly, forks that stop fighting CI". The phrase "cheaper ranking" indicates the ranking step was made less expensive to run, and "portals that fail loudly" indicates a change in how portal failures surface rather than being swallowed. The changelog is the place to read the specifics; the README does not document them.

## Installing it and running a first application

The README gives a fork-and-clone quick start. The gh command below forks the repository and clones it into the current directory, then changes into it. Note the warning that follows in the README: a fork of a public repository is always public, and /setup writes personal data into tracked files. The README's own recommendation is to use a private repository with this repo as upstream unless you are forking to contribute.

```bash
gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search
```

Next, install the job search CLI tools. The Bash form loops over six skill directories and runs bun install in each. For linkedin-search and freehire-search the README says the install is optional, since both have zero runtime dependencies and run with plain bun; bun install only pulls TypeScript dev types.

```bash
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do
  (cd .agents/skills/$tool/cli && bun install)
done
```

Then set up your profile. Starting Claude Code and running /setup gives three paths: read a populated documents/ folder, import a single CV pasted into chat, or answer an interview.

```bash
claude
# Then inside Claude Code:
/setup
```

After that, the first real use is /scrape to search portals and /apply with a posting URL. Before any of this, confirm your LaTeX setup, because the two document types compile with different engines. The README states the CV compiles with lualatex, and that pdflatex often fails on modern MiKTeX installs with fontawesome5 font-expansion errors. The cover letter compiles with xelatex because cover.cls requires fontspec. Minimal TeX installs such as TinyTeX or BasicTeX need extra packages, listed in SETUP.md under the minimal TeX install section.

## The privacy trap in forking a public repository

This is the sharpest limitation in the README, and it is easy to miss. GitHub does not allow private forks of public repositories. The setup step writes your name, contact details, employment history and salary expectations into tracked files. A normal fork therefore publishes your job search data.

The README does not leave you stuck. It points to a two-minute recipe in SETUP.md section 8 for using a private repository with this repo as upstream, and states that every update workflow works identically. Fork only to contribute. That is a clear position, and it is the right one, but it puts the burden on the reader to notice the warning before running /setup rather than after.

There is a second boundary worth stating plainly. The toolchain is local, which means nothing is sent to a job-search vendor, but it still runs through Claude Code, so your prompts and profile content go wherever that tool sends them. The README does not document a data-flow diagram for that path. If your threat model includes the model provider, this project does not change it.

## Where the framework stops working

The portal search skills are built for the Danish market. That is stated directly, and it is the single biggest constraint for an international reader. The README says the pattern is designed to be swapped for your local job boards, and AGENTS.md is offered as a starting point for other agent tools, with community forks adapting the full workflow. But swapping portals is work you own.

The ATS parseability check in /apply has a graceful-degradation path that is worth understanding before you rely on it. It optionally uses pypdf, installed with pip install pypdf, described as BSD licensed and requiring no Poppler. Poppler pdftotext remains a fallback. If both are missing, the README states the check degrades to a visual keyword review. A visual review is not a parseability check, and treating it as one would give you false confidence about how an applicant tracking system reads your CV.

Finally, this is a repository you maintain, not a product. The release cadence is visible in the changelog, with v1.6.0, v1.7.0 and v1.7.1 between 2026-08-19 and 2026-09-06, and the last push was on 2026-09-09. That is recent activity, and the repository is not archived. It is still your fork to keep in sync, and the release titled "forks that stop fighting CI" suggests that keeping a fork aligned with upstream has been an ongoing friction point.

## How it differs from hosted AI job search tools

Hosted AI job search products typically ask you to upload a CV, then generate applications inside their interface. You get convenience and a dashboard. You give up control of the data and the logic, and you cannot change how fit is scored or how a cover letter is framed.

ai-job-search inverts that. The evaluation criteria, the templates, the reviewer prompt and the portal adapters are files in a repository you can edit. The cost is the install: Claude Code, Python 3.10+, Bun, and a LaTeX distribution with two engines. For an engineer who already has most of that, the trade is favourable. For someone who wants to paste a CV into a website, it is not.

A second difference is the reviewer agent. Many generators produce a single draft and stop. Here the draft is critiqued by a separate agent and then revised. Whether that produces better letters is not something the README measures, and the author's own hiring outcome is a sample of one. Treat the two-agent loop as a design choice with a plausible rationale, not as a demonstrated quality advantage.

## Licence, maintenance and what an upgrade costs you

The project is MIT licensed. For a personal job search that means you can fork, modify and keep your copy private, and the licence text is in the repository root as LICENSE. This is not legal advice, and if you plan to redistribute a modified version or use it commercially, read the licence yourself.

Upgrade cost is the part people underestimate. Because /setup writes into tracked files, pulling upstream changes into a fork that already contains your profile is a merge, not a download. The README anticipates this: SETUP.md section 8 covers pulling upstream updates into your fork, and the README states every update workflow works identically whether you forked or used a private repository with upstream configured. The v1.7.1 release title mentions forks that stop fighting CI, which reads as an acknowledgement that this friction was real.

The dependency surface is also yours to maintain. Bun installs six CLI tool directories. The LaTeX side needs lualatex and xelatex, and a minimal TeX install needs extra packages from SETUP.md. None of that updates itself. There is no release channel described in the README beyond the repository and its changelog.

## Conclusion

Adopt it if you already run Claude Code, are comfortable editing Python and LaTeX, and want your job search to stay on your own machine. Skip it if you want a hosted service, if you are not willing to maintain a fork, or if you job hunt mainly outside Denmark and do not want to write portal adapters. Before you commit, verify three things: that lualatex and xelatex both work on your machine, that you have read SETUP.md section 8 on pulling upstream updates, and that your profile repository is private rather than a public fork.

## FAQ

### Is there an AI job search tool that runs on my own machine?

ai-job-search is one: the README describes it as "the job search that runs on your machine", built on Claude Code with Python 3.10+, Bun and a LaTeX distribution as prerequisites. It is a repository you fork or clone rather than a hosted service.

### How do I use ai-job-search?

The README's quick start is fork and clone, install the job search CLI tools with bun install, run claude, then run /setup inside Claude Code to build your profile. From there /scrape searches job portals and /apply takes a posting URL through fit evaluation, drafting and review.

### Can I use ai-job-search with LinkedIn?

There is a linkedin-search skill directory among the six CLI tools the README lists. The README notes its install is optional because it has zero runtime dependencies and runs with plain bun, with bun install only pulling TypeScript dev types.

### What is ai-job-search?

It is an AI job application framework built on Claude Code. According to the README, it lets Claude evaluate job postings, tailor your CV, write cover letters and prepare you for interviews, with a drafter-reviewer pipeline for the application documents.

### Is ai-job-search legit?

The README states it is an independent open-source project, not affiliated with or endorsed by Anthropic, and that it has no affiliated cryptocurrency, token or paid sponsorship program, calling anything claiming otherwise a scam. The only support channels it lists are the Ko-fi link and contributing on GitHub.

### Is there a free AI job search and apply tool?

The ai-job-search repository is MIT licensed, so the code is free to use and modify. The README lists Claude Code, Python 3.10+, Bun and a LaTeX distribution as prerequisites you supply yourself, and pypdf is optional for the ATS parseability check.

## Sources

- [Issues](https://github.com/MadsLorentzen/ai-job-search/issues)
- [License: MIT](https://github.com/MadsLorentzen/ai-job-search/blob/master/LICENSE)
- [MadsLorentzen/ai-job-search on GitHub](https://github.com/MadsLorentzen/ai-job-search)
- [README](https://github.com/MadsLorentzen/ai-job-search/blob/master/README.md)
- [Releases](https://github.com/MadsLorentzen/ai-job-search/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/madslorentzen-ai-job-search
