diff --git a/README.md b/README.md index 3e4908d..c9dbab9 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ The framework encodes career guidance best practices, including structured evalu - [Claude Code](https://claude.com/claude-code) (CLI) - Python 3.10+ - [Bun](https://bun.sh) (for Danish job search CLI tools) -- LaTeX distribution (for compiling CVs and cover letters): [TeX Live](https://tug.org/texlive/) or [MiKTeX](https://miktex.org/) +- LaTeX distribution with `lualatex` and `xelatex`: [TeX Live](https://tug.org/texlive/) or [MiKTeX](https://miktex.org/). The CV compiles with `lualatex` (pdflatex often fails on modern MiKTeX installs with `fontawesome5` font-expansion errors); the cover letter compiles with `xelatex` because `cover.cls` requires `fontspec`. ## Quick start @@ -127,17 +127,25 @@ ai-job-search/ ## How `/apply` works -The `/apply` command runs a **drafter-reviewer workflow**: +The `/apply` command runs a **drafter-reviewer workflow** with mandatory PDF compilation: 1. **Parse** the job posting (URL or text) 2. **Evaluate fit** against your profile (skills, experience, culture, location, career alignment) 3. **Draft** a tailored CV and cover letter in LaTeX 4. **Spawn a reviewer agent** that researches the company and critiques the drafts 5. **Revise** based on the reviewer's feedback -6. **Present** the final output with a verification checklist +6. **Compile and inspect** both PDFs: lualatex for the CV, xelatex for the cover letter. Claude reads the rendered pages and iterates on the LaTeX until the CV is exactly 2 pages with no orphaned entry titles, and the cover letter is exactly 1 page with the signature visible and fonts consistent. +7. **Present** the final output with a verification checklist All claims in the CV and cover letter are verified against your actual profile. The system never fabricates skills or experience. +### What makes this workflow different + +- **PDF verification loop.** Most LaTeX-resume templates produce "looks fine in the .tex" output that breaks in the PDF: job titles orphan to the next page, cover letters spill onto page 2, bullet fonts silently fall back to the body font. The `/apply` command compiles and visually inspects every PDF and applies targeted fixes (`\needspace`, `\enlargethispage`, font-matching wrappers for list items) until the layout is clean. This runs automatically on every application. +- **Relevance-weighted CV cutting.** When a CV overflows 2 pages, the workflow does not cut mechanically from the "oldest" section. It scores each candidate line by (a) relevance to the target posting, (b) uniqueness in the document, and (c) whether the cover letter depends on it, and cuts the lowest-total-score line first. An older-role bullet that hits posting keywords survives ahead of a recent-role bullet that does not. +- **Drafter-reviewer separation.** The drafter writes; a second Claude agent, spawned with a fresh context, researches the company and critiques the drafts. The drafter then revises. This catches missed keywords, weak framing, and generic language that a single pass often leaves in. +- **Token-efficient.** Reviewer receives drafts inline rather than re-reading files. Verification runs once, at the end. + ## Customization ### Which files to edit manually diff --git a/SETUP.md b/SETUP.md index c3bb4fd..029e0eb 100644 --- a/SETUP.md +++ b/SETUP.md @@ -38,7 +38,7 @@ Install a LaTeX distribution to compile the generated `.tex` files to PDF: - **macOS:** [MacTeX](https://tug.org/mactex/) - **Linux:** `sudo apt install texlive-full` or `sudo dnf install texlive-scheme-full` -The CV compiles with `pdflatex`. The cover letter compiles with `xelatex` (for custom fonts). +The CV compiles with `lualatex` (pdflatex often fails on modern MiKTeX installs with `fontawesome5` font-expansion errors). The cover letter compiles with `xelatex` because `cover.cls` requires `fontspec` for its custom Lato/Raleway fonts. ## 2. Fork and clone