Job Hunting With Claude Code: a Tailored Resume and Cover Letter for Every Posting in One Command (Setup From Scratch)
A resume and cover letter for one specific job in a single command: install ai-job-search, fill in your profile, paste a link, get PDFs a second agent checked.
In this article12
- What ai-job-search is, in plain words
- Do you need this
- Step 1. Install Claude Code and three programs
- Step 2. Tell it about yourself once: /setup
- Step 3. A resume and cover letter for the job: /apply
- Step 4. Where to find jobs if you're not in Denmark
- Step 5. Prepare for the interview: /interview
- Where it falls short
- Examples: how to repeat this
- Prompt kit
- Plan for tonight
- Before and now
Tools used in this piece
This is a free open-source project that turns Claude Code (the version of Claude that runs right on your computer) into a personal job-search assistant. You tell it about yourself once, and after that you just hand it a link to a job posting or its text. It scores how well you fit, writes a resume and cover letter for that exact posting, passes them to a second, reviewing assistant for critique, revises them and produces clean PDFs. It invents nothing about you: every line is checked against your profile. You need a paid Claude subscription and one evening for the first setup. The built-in job-board search is aimed at Denmark, but the main command works with any posting whose text you paste in.
Usually you polish one resume and send it to twenty job postings.
There is no energy left for a cover letter per job, so it's one letter for all of them, or none at all.
And it shows: a resume about everything reads like a resume about nothing.
Mads Lorentzen, a geophysicist by training, lost his job at the end of 2025 and solved this problem for himself. He built an assistant on top of Claude Code that writes an application for each posting, and released it as open source under the name ai-job-search.
By his account, that led to 69 applications, 20 first-round interviews and one contract: since June 2026 he has been working as an AI engineer.
Below we set this assistant up from scratch. By step 2 you will have a finished profile, and by step 3 your first resume and cover letter for a real posting.
Open-source project by Mads Lorentzen under the MIT license: profile, job scoring, resume and cover letter with a critic agent, and interview prep in Claude Code.
What ai-job-search is, in plain words
It's a folder of instructions for Claude Code. Claude Code is Claude working not in a chat window but in the terminal on your computer: it reads and writes files in the folder you choose and runs programs. If the terminal is new territory for you, start with our guide to three ways to work with AI: chat, browser and terminal.
Inside the folder are your profile, resume and cover letter templates, rules for scoring jobs, and a set of commands. The three main ones:
- 1
/setup
Builds your profile: reads your resume and documents or interviews you, and sorts everything into files.
- 2
/scrape
Searches job boards and shows the postings that fit. The built-in boards are Danish; other countries are covered in step 4.
- 3
/apply
Takes a link or the text of a posting, scores the match, writes a resume and cover letter, hands them to the critic, revises them and builds PDFs.
The strongest part here isn't the text generation, it's how the generation is organized. Picture a writer and an editor. The writer drafts and gets attached to the draft, so they stop seeing its weak spots. The editor comes in with fresh eyes, reads up on the company and says: "this part is generic, and you didn't mention this project of yours at all." In ai-job-search the writer and the editor are two separate Claude agents, and the second one starts with a clean memory, without seeing how the draft was written.
The second difference from "ask ChatGPT to rewrite my resume": the assistant doesn't embellish. It checks every claim in the resume against your profile, and it won't add a skill you don't have, even if the posting asks for it. It shows it as a gap instead, and you decide what to do about it.
Do you need this
It's worth an evening if:
- you apply to more than a couple of jobs a week and rewrite your resume by hand every time;
- you already have a Claude Pro or Max subscription and are willing to open a terminal once;
- you want each application to speak to a specific company, not "Dear Hiring Manager."
You can skip it if you're looking for one job through a personal referral, if your resume only lives on one site with its own builder, or if you're not ready to install programs on your computer right now. Then a regular chat with Claude is enough: paste the posting and your resume and ask it to tailor one to the other.
Step 1. Install Claude Code and three programs
What you need up front: a Claude subscription (Pro, Max or Team) or API credits, since Claude Code has no free tier. And the computer itself: Windows, macOS and Linux all work.
The assistant needs four things: Claude Code, Python, Bun (it runs the job-board search) and LaTeX (a program that lays out the resume as a PDF). Commands for macOS and Linux:
npm install -g @anthropic-ai/claude-codepython3 --version # you need 3.10 or newercurl -fsSL https://bun.sh/install | bash# LaTeX: MacTeX on Mac, TeX Live on Linux, MiKTeX on Windows
On Windows, Bun installs with winget install Oven-sh.Bun, and LaTeX through the MiKTeX installer. Details for each system are in the repository's SETUP.md file.
Next comes the folder itself. The author warns that a GitHub "Fork" is always public, and it will hold your name, phone number, experience and salary expectations. So for your own job search, make a private repository; the two-minute recipe is in section 8 of the same SETUP.md. Or simply download the project as an archive and work with the folder on your computer, no GitHub needed.
The last command installs the job-search tools:
python3 tools/install_portal_clis.pyclaude
Result: Claude Code opens in the terminal and sees all the project's commands.
Step 2. Tell it about yourself once: /setup
Type /setup in Claude Code. The command offers three paths: read the documents/ folder (resume, LinkedIn profile export, diplomas, references, old applications), take a single resume that you paste into the chat, or interview you. If you have files, put them in documents/ before you start.
Along the way it asks which language to write the resume in. The default is English, but you can pick the language of your job market. It always writes the cover letter in the language of the posting. It also asks which languages you speak and at what level. That's not a formality: a posting that requires a language missing from your profile gets filtered out before scoring.
The author says the quality of applications depends most on how detailed the profile is. So don't list skills; describe what you actually did. Here's an answer you can give in the interview:
For the last [3 years] I worked as [job title] at [type of company].
The main thing I did there: [project], and as a result [what changed, with a number if you have one].
Every day I used [programs and tools] for [tasks].
What I enjoyed most was [what energized you], and least [what drained you].
Next I want [what kind of work], and I'm not open to [what's ruled out: relocation, night shifts, 5 days in the office].Replace: everything in square brackets with your own details, no embellishment. Result: your profile is split into files in the folder, and you can open and edit them by hand.
That's your first finished result. Every application from here on builds on these files.
Step 3. A resume and cover letter for the job: /apply
Find a posting you're interested in and give it to the assistant:
/apply [link to the job posting]Replace: the link with a real posting. If the site won't serve the page, paste the full text of the posting instead of the link. Result: a match score, then a resume and cover letter as PDFs.
Here's what happens inside, in order. First the scoring: five dimensions (skills, experience, personality, location, career goal) and a total out of 100. At 75 and above it recommends applying and tailoring everything; from 60 to 74, applying and addressing the gaps in the cover letter; below 45, probably skipping. Then a draft resume and cover letter. Then the second agent researches the company and critiques the draft, and the first one revises. Finally the assistant builds the PDFs and checks the pages itself: the resume has to fit exactly two pages, the cover letter exactly one, with no headings cut off from their text.
There's also a check people rarely think about. Many companies run resumes through a filtering program that reads not the image but the text inside the PDF. The assistant extracts that text and checks that your contact details and the posting's keywords are visible. Keywords your profile backs up, it adds. The rest it leaves as gaps and doesn't slip in just to pass the filter.
If you want to adjust the result, talk to it like an editor:
The cover letter has too many generic lines about motivation.
Remove the first paragraph and open with [project], which is closest to their task about [task from the posting].
Keep it to one page.Replace: the project with one from your profile and the task with one from the posting. Result: a new version of the cover letter as a PDF, everything else unchanged.
We think this is where the project's value lies, and we're ready to be wrong about professions where an application is a form on a website rather than a letter. Any chat can tailor text. Running an application past a critic and stopping yourself from embellishing is hard without a dedicated tool.
Step 4. Where to find jobs if you're not in Denmark
Out of the box, /scrape searches four Danish job boards. For other countries there are three routes, from simple to advanced.
- Paste the text. Found a posting on any site, copied the text, gave it to
/apply. That alone makes the assistant useful. - LinkedIn. The project includes a search of public LinkedIn job postings for any country; you set the city when you run it. The author is blunt: automated access is against LinkedIn's rules, so use it only for yourself and sparingly.
- Your own site. The
/add-portalcommand studies a job board in your country, builds a search for it and tries a query before connecting it. Sites where postings are visible only after you log in are off the table.
Once you've collected a lot of postings, the /rank command scores them in a batch and returns a shortlist of the best. Then you pick a number, and it passes that posting to /apply.
From this list, keep only remote jobs or jobs in [city].
For each of the top five, in two lines: why I fit and what I'm missing.Replace: the city with your own. Use this prompt after /rank has returned its list.
Result: a shortlist with honest strengths and gaps for each posting.
Step 5. Prepare for the interview: /interview
When you get invited to talk, log it with the /outcome command, then run /interview. The assistant takes the posting and exactly the resume and cover letter the interviewer read, researches the company and the people you'll be talking to, and matches likely questions to examples from your experience. Then it can run a mock interview.
Run a mock interview with me for [job title] at [company].
Ask one question at a time, wait for my answer, then briefly tell me what was weak and how to say it better.Replace: the job title and company. Use this prompt after /interview has put together the prep pack.
Result: question-by-question practice with feedback on every answer.
Where your experience falls short, the assistant suggests an honest bridging answer instead of inventing experience for you. That principle runs through the whole project.
Where it falls short
Three limitations worth knowing up front
Paid subscription: without Claude Pro, Max, Team or API credits the assistant won't run, and every application means work by two agents plus PDF builds, which eats into your subscription limits. Job search is Danish out of the box: in other countries you rely on pasted posting text, LinkedIn or your own site via /add-portal. Protection against tricks hidden in a posting's text is done with rules for the model, not a separate sandbox, so the author recommends reviewing what was downloaded and written before you send anything.
How to do it right: keep your profile in a private folder, read every PDF in full before sending it, and don't feed the assistant postings from unfamiliar sites without looking at them first. And if your subscription limits run out faster than you'd like, here's our breakdown of how Claude Code's weekly limits work.
Versions, commands and prices as of October 17, 2026. The project updates often, so check the README for the latest.
Examples: how to repeat this
Changing careers. Mads came from geophysics and landed a job as an AI engineer. In your profile, describe not just job titles but what you enjoyed doing, and ask the assistant to suggest roles you hadn't considered. The author describes this mode directly: looking for non-obvious paths based on the actual work, not on job titles.
After a layoff, when you need a lot of applications. Once a week run /scrape or the LinkedIn search, then /rank, then /apply for the top three. The /outcome followup command shows applications with no reply after 10 days and drafts a short follow-up. Whether to send it is up to you.
First job or internship. You don't have much experience, so build the profile from your studies, coursework and projects. The assistant will show the gaps honestly, and the /upskill command turns them into a plan: what's missing and where to learn it.
Moving within your own company. Paste the text of an internal posting into /apply. The letter to the head of the neighboring team will be about their problems, not a retelling of your resume.
Not a resume, but an application. A grant, a competition, a program selection: the same "writer drafts, editor with a fresh memory critiques" approach applies. We covered a similar approach in our article on the Cloudflare skill where a second agent confirms each finding.
Prompt kit
Everything except the [brackets] copies as is. Type these prompts into Claude Code in the project folder.
A deeper profile
Read my profile and ask me 10 questions about what's missing from it, so that resumes for different jobs come out more specific. Ask one at a time.A new fact for the profile
Add to my profile: in [year] I [what I did], the result was [what changed]. Show me which file you wrote it to.Is it worth applying
Score this job posting, but don't write a resume yet: [posting text]Gaps, no embellishment
For this posting, list which requirements I don't meet according to my profile, and for each one suggest honest wording for the cover letter: [posting text]Shorter
Shorten the resume: remove the lines least relevant to this job. Don't touch the contact details or my last [2] positions.Reply to a recruiter
A recruiter wrote: [message text]. Draft a short reply in my style, using only what's already in the resume and cover letter I sent. Don't send it.Making sense of a rejection
I was rejected after the first interview at [company]. Run /outcome, log the rejection and tell me what in my profile is worth strengthening for similar jobs.Plan for tonight
- 1
15 minutes
Install Claude Code, Python, Bun and LaTeX as in step 1.
- 2
5 minutes
Download the project into a private folder and run the job-search tools installer.
- 3
10 minutes
Put your resume, LinkedIn export, diplomas and old cover letters into documents/.
- 4
20 minutes
Go through /setup and answer the questions in detail, using the template from step 2.
- 5
15 minutes
Find one real job posting and run /apply with its link or text.
- 6
10 minutes
Read both PDFs in full and ask for one edit to the cover letter.
Before and now
Before, you sent one resume to every posting and wrote a cover letter only when a job really caught your eye. Now every posting gets its own application, read by a second agent and checked against your real experience.
This project isn't about AI looking for a job for you. It's about spending your energy on choosing jobs and talking to people, not on the tenth version of the same letter.
The main investment here is one detailed profile, and it pays off with every application after that.
If you want to feel confident in Claude Code and keep building assistants like this for your own tasks, start with our guide on working with Claude as a partner, not a chatbot.
Sources5expand
- Mads Lorentzen, "AI Job Search", README, checked 17.10.2026 — https://github.com/MadsLorentzen/ai-job-search
- Mads Lorentzen, "Setup Guide" (SETUP.md), checked 17.10.2026 — https://github.com/MadsLorentzen/ai-job-search/blob/master/SETUP.md
- Mads Lorentzen, "Job Evaluation Framework" (04-job-evaluation.md), checked 17.10.2026 — https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/04-job-evaluation.md
- GitHub, "Trending", 17.10.2026 — https://github.com/trending?since=daily
- Nicolas Deville, "ai-job-search", note — https://notes.nicolasdeville.com/github/ai-job-search/
Read next
The skill that grew into Cloudflare's 7,245 bug findings. What will it find in your repository?September 29, 2026
The Claude Code ecosystem: what to take and what to skipAugust 25, 2026
Anthropic raised Claude Code's weekly limits by 25% and cut them by 17% on the same day. How are both numbers true?September 15, 2026

Comments