The GitHub Framework Treating Job Applications Like a Software Release

MadsLorentzen's open-source workflow encodes career strategy into structured Markdown, LaTeX compilation loops, and a drafter-reviewer agent pipeline—offering a transparent, hackable alternative to the booming crop of AI job-search SaaS platforms.
From SaaS Black Boxes to a Hackable Pipeline
The AI job-search market has become a crowded bazaar of promises. Jobright.ai claims more than two million users and over eight million listings, boasting that eighty percent of job seekers prefer it after a first use [1]. Simplify.jobs reports 1.5 million users and over two hundred million applications submitted through its platform [9]. Careerflow.ai cites 1.2 million users and a sixty percent faster time to interviews [10]. Sprout advertises a 4.8 App Store rating and claims to save users more than twenty hours per week [4]. Sonara.ai goes further, offering to apply continuously on a user’s behalf until they are hired [7]. These services wrap large language models in sleek interfaces, offering one-click autofill, ATS keyword stuffing, and automated outreach.

Against this backdrop of commercial optimization, a GitHub repository called ai-job-search by Mads Lorentzen feels almost anachronistic. It is not a web app. It does not take your email and credit card. It is a framework built on Anthropic’s Claude Code CLI that treats job hunting as a structured engineering workflow. Fork it, populate a documents folder with your CV, LinkedIn export, and diplomas, and you have a local, version-controlled application pipeline. The philosophy is transparently opposite to the SaaS model: instead of renting a black box, you own the infrastructure.
The Workflow: Setup, Scrape, Apply, Upskill
The core architecture is a set of slash commands that turn Claude Code into a full-stack recruiting assistant. The setup command ingests source material—PDFs, past applications, or a live interview—and distills them into structured Markdown profiles. These are not ephemeral chat threads; they are files like 01-candidate-profile.md, 02-behavioral-profile.md, and 03-writing-style.md, persisted in the repository and safe to re-run as you add material. The scrape command orchestrates Bun-based CLI tools to query Danish job portals—Jobindex, Jobnet, Akademikernes Jobbank, Jobdanmark—and returns deduplicated listings scored against your profile.
Two less obvious commands reveal the project’s ambition beyond mere automation. The expand command enriches your profile by scanning public sources you have already linked—GitHub repositories, portfolio sites, Kaggle, Google Scholar—and looking up syllabi for named courses. It adds discovered competencies with source tags, surfacing skills that a static CV omits. The upskill command analyzes the gap between your profile and tracked postings, producing a prioritized heatmap of missing skills alongside web-searched learning resources and time estimates. This is career planning infrastructure, not just application acceleration.
When pointed at a posting, the apply command parses the description, evaluates fit across skills, culture, location, and career alignment, and enters a drafter-reviewer pipeline. A drafter agent produces tailored LaTeX for a CV and cover letter. Then a second Claude agent, spawned with fresh context, researches the company and critiques the drafts. The drafter revises. This separation of concerns is designed to catch the generic phrasing and missed keywords that single-pass generation often leaves behind.
The Technical Obsession: PDF Verification and Algorithmic Editing
What distinguishes this framework from the dozens of AI resume tools flooding the market is its refusal to treat the output as mere text. Most tools stop at a polished paragraph. The Poe-hosted Claude Resume Builder offers interactive feedback on buzzwords and passive language but ultimately produces advice, not a verified document [12]. Nico Appel’s described workflow using Claude Sonnet to draft a resume relied on iterative chat and the user’s own judgment to finalize formatting [3]. Debbie Levitt’s experience with Claude.ai revealed that her PDF contained bad code and markup that misread a two-page resume as three, requiring a manual rebuild from scratch [11]. These anecdotes highlight a common failure mode: AI resume tools generate content while ignoring the physical reality of the file that actually gets uploaded.
Lorentzen’s framework treats the document as an artifact that must compile. The apply command runs a mandatory PDF verification loop. The CV is compiled with lualatex; the cover letter with xelatex. Claude then reads the rendered pages and iterates on layout issues: orphaned section titles, cover letters bleeding onto a second page, bullet points whose fonts silently fall back to the body text. It injects spacing commands until the CV is exactly two pages and the cover letter exactly one, with the signature visible. The framework even optimizes token economics: the reviewer agent receives drafts inline rather than re-reading them, and the verification checklist runs once at the end. The PDF compile-and-inspect step spends some of those savings, but the trade is deliberate—token cost is exchanged for a real reduction in broken documents.
When a CV exceeds two pages, the workflow does not simply lop off the oldest entry. It runs a relevance-weighted cutting algorithm, scoring each line by its relevance to the target posting, its uniqueness in the document, and whether the cover letter references it. The lowest-scoring line is cut first, even if it is recent. An older bullet that hits posting keywords survives. It is a curiously rational approach to a task usually governed by anxiety and nostalgia.
Position in the Field: Local-First vs. the Platform Play
The repository occupies a distinct niche. Commercial platforms like Simplify and Careerflow centralize job tracking, autofill, and resume tailoring behind a login wall [9][10]. The University of Miami’s career site republished a survey of tools including Joby, which scans listings and optimizes resumes; Huntr, a Chrome extension that autofills application forms; and Teal, a tracker that suggests resume customizations [2]. These are useful conveniences, but they are browser accessories. Lorentzen’s framework is a full-stack alternative that stores your behavioral profile, writing style rules, and interview prep in structured files you can diff, branch, and audit.
This local-first approach comes with trade-offs. The job portal scrapers are built for the Danish market, and extending them to other countries requires writing new Bun CLI tools. The system demands a LaTeX distribution, Python 3.10 or newer, and comfort with a terminal. It is, by the author’s own admission, a pattern and a workflow more than a standalone engine. The heavy lifting is Claude Code; the repository is the scaffolding. The salary benchmarking tool requires you to bring your own data, or it skips the step entirely.
Outlook: Agentic Workflows as Personal Infrastructure
The broader significance of this project lies in what it portends. As large language models mature, the frontier is shifting from chat interfaces to agentic workflows. Lorentzen’s repository treats Claude Code not as a conversational partner but as an operating system for a personal hiring pipeline. The slash commands function like API endpoints for your career. The drafter-reviewer pattern demonstrates that even subjective tasks—writing a cover letter, judging cultural fit—benefit from multi-agent critique and explicit scoring rubrics.
The README also acknowledges a subtle duality in job searching: explicit targeting versus latent opportunity discovery. By analyzing the full texture of your history—not just titles, but what energized or drained you—the system can surface unexpected career paths. This requires the user to invest in the setup interview beyond mere job titles, describing projects, tools, and measurable achievements. It is a curiously humanistic requirement for a tool that otherwise behaves like a continuous integration pipeline.
The open question is whether job seekers will tolerate the friction. The README is blunt: a thin profile produces generic applications, while a detailed one enables genuinely tailored results. In a market where Sonara promises to apply ten times as fast with less effort [7], and Sprout claims to reduce time per job to seconds [4], this framework asks users to slow down, structure their history, and maintain their own infrastructure. For the technically literate, that may be the point. It offers something the SaaS platforms cannot: proof that the machine actually read the job description, compiled the PDF, and checked the page count before asking you to hit send.
Sources
- Jobright: Your AI Job Search Copilot
- 10 AI Tools to Supercharge Your Job Search - Custom Career Content
- Writing a Resume with Claude (or ChatGPT) - LinkedIn
- Sprout - AI Job Search | Land Your Dream Job
- Any recommendations for AI job searching tools? : r/jobsearchhacks
- I wrote a system-prompt for creating and editing resumes using ...
- Sonara: AI Job Search Tool & AI Auto Apply
- AI Resume Analyzer - Claude
- Simplify | AI Job Search Platform
- Careerflow - Your Career Copilot | Powerful AI Job Search Tools
- Claude Surprised Me With Resume Improvements | by Debbie Levitt
- Claude-AI-Resume - Poe