AI Job Search is a job-application workflow that runs inside Claude Code on your own machine. You fork the repository, fill in your profile once, then drive the search with slash commands: /setup builds your candidate profile, /scrape searches job portals and deduplicates the results, and /apply evaluates fit, then drafts a tailored CV and cover letter.
The /apply command runs a drafter-reviewer loop. A first pass parses the posting, scores fit across skills, experience, culture, location, and career alignment, and drafts LaTeX documents. A second agent with a fresh context researches the company and critiques the drafts, and the drafter revises. Both files are then compiled and visually inspected — lualatex for the CV, xelatex for the cover letter — and iterated until the CV is exactly two pages and the cover letter one. A final check extracts the PDF's text layer with pdftotext to verify contact details, reading order, and keyword coverage as an applicant tracking system would parse them; when the CV overflows, lines are cut by a score combining relevance, uniqueness, and cover-letter dependency.
The profile, evaluation, and application pipeline are language- and country-agnostic. The shipped portal search skills target the Danish market — Jobindex, Jobnet, Akademikernes Jobbank, and Jobdanmark — alongside LinkedIn public listings and the freehire aggregator, and /add-portal generates a skill for another job board by investigating its search URLs and result structure first.
Ten further commands extend the core loop: /rank batch-scores scraped postings into a shortlist, /interview builds a stage-specific prep pack and mock interview, /outcome records results and archives submitted materials, /gmail-sync proposes status changes from your inbox for approval, /notion-sync publishes a read-only pipeline view to a Notion database, /upskill maps skill gaps to a learning plan, /expand enriches the profile from public sources you have linked, /html-report renders an offline dashboard, and /add-template registers your own CV or cover letter template.
Running it requires Claude Code, Python 3.10 or newer, Bun, and a LaTeX distribution providing lualatex and xelatex; pypdf or Poppler's pdftotext enables the parseability check. Job postings are treated as untrusted input: the workflow follows no instructions embedded in them and fetches no links from their body, and those defenses are instruction-level rather than a sandbox.
Features
- Profile setup: /setup builds a candidate profile from a documents folder, a pasted CV, or a guided interview, and can be re-run per section
- Portal search: /scrape queries multiple job boards, deduplicates postings, and sorts them by fit
- Fit evaluation: postings are scored across five dimensions with deal-breaker vetoes and deadline urgency flags
- Drafter-reviewer pipeline: a second agent with a fresh context critiques each CV and cover letter before revision
- PDF compile loop: documents are compiled and inspected until page counts, orphaned titles, and font fallbacks are resolved
- ATS text-layer check: the compiled CV's extracted text is verified for contact details, reading order, and keyword coverage
- Relevance-weighted cutting: overflowing CV lines are removed by relevance, uniqueness, and cover-letter dependency
- Application tracking: /outcome records stages and archives the posting, CV, and cover letter per application
- Inbox and board sync: /gmail-sync proposes status updates from email for approval, /notion-sync mirrors the pipeline into Notion
- Interview prep: /interview assembles a prep pack from the archive and runs a roleplay mock interview
- Custom templates and portals: /add-template and /add-portal register your own templates and local job boards
- Untrusted-input handling: postings are processed without following embedded instructions
