# AI Job Search Page Length Requirements: Strict 2‑Page CV and 1‑Page Cover Letter Limits

> AI Job Search requires strict 2 page CVs and 1 page cover letters. Automated tools validate every document to ensure compliance. Learn the specific page length requirements.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: best-practices
- Published: 2026-08-25

---

**AI Job Search enforces exactly 2 pages for CVs and exactly 1 page for cover letters, validating every PDF at runtime using automated verification tools.**

The AI Job Search framework generates LaTeX documents with hardcoded page length constraints designed to ensure ATS‑friendly submissions. These limits are baked into the compilation workflow and validated programmatically, preventing users from submitting over‑long application materials.

## CV Page Limit: Exactly 2 Pages

Every Curriculum Vitae generated by the framework must compile to **exactly 2 pages** when processed with `lualatex`. This requirement is hardcoded in the template specification at [`/.claude/skills/job-application-assistant/05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/05-cv-templates.md), specifically in the "Page Budget – Hard 2‑Page Limit" section (lines 107‑113) and the "Expected output" comment (lines 23‑24).

The template allocates specific line budgets to each CV section to maintain this constraint. If the initial content exceeds the limit, the framework invokes a **relevance‑weighted cutting** algorithm that trims low‑relevance lines until the document fits the required 2‑page format.

## Cover Letter Page Limit: Exactly 1 Page

Cover letters must fit on **exactly 1 page** with the signature visible. The `/apply` command description in [`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md) explicitly states this one‑page requirement, while the `cover_letters/cover.cls` LaTeX class enforces it through minimal page margins and typography settings optimized for single‑page layouts.

Unlike the CV, the cover letter workflow does not implement automatic content cutting. If the compiled PDF exceeds one page, the system prompts the user to manually reduce content before proceeding.

## Where Page Limits Are Defined in the Source

The constraints are distributed across four key files in the MadsLorentzen/ai‑job‑search repository:

- **[`/.claude/skills/job-application-assistant/05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/05-cv-templates.md)** – Defines the CV’s 2‑page budget table and hard limit specifications.
- **`cover_letters/cover.cls`** – A minimal article class that constrains layout parameters to single‑page outputs.
- **[`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md)** – Documents the `/apply` workflow and the explicit "exactly 1 page with signature visible" requirement for cover letters.
- **[`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py)** – Implements the runtime enforcement logic that validates actual page counts against these requirements.

## Automated Validation During Compilation

During the "compile‑and‑inspect loop" triggered by the `/apply` command, the framework executes a strict validation pipeline:

1. **LaTeX Compilation** – Executes `lualatex -interaction=nonstopmode` for CVs and `xelatex` for cover letters:

```bash
lualatex -interaction=nonstopmode cv.tex
xelatex -interaction=nonstopmode cover_letter.tex

```

2. **Page Count Verification** – Calls [`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py), which parses the PDF metadata to extract the total page count. The script fails the build if the CV does not contain exactly 2 pages or the cover letter does not contain exactly 1 page.

3. **Error Handling** – When [`verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/verify_pdf.py) detects a page count mismatch, the workflow aborts and initiates the appropriate correction step: automated relevance‑weighted cutting for CVs, or a user prompt for manual content reduction for cover letters.

## Summary

- **CVs must be exactly 2 pages**, enforced by templates in [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md) and validated by [`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py).
- **Cover letters must be exactly 1 page**, configured in `cover.cls` and verified during the `/apply` workflow.
- The [`verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/verify_pdf.py) script uses PDF parsing to extract page counts and hard‑fails builds that violate limits.
- CVs use automated relevance‑weighted cutting to enforce limits; cover letters require manual editing if over‑full.
- These constraints ensure every generated application document is visually consistent and recruiter‑friendly.

## Frequently Asked Questions

### What happens if my CV compiles to more than 2 pages?

The [`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py) verification script detects the excess pages and aborts the workflow. The framework then automatically triggers a relevance‑weighted cutting algorithm that removes low‑priority content from the CV until the PDF contains exactly 2 pages.

### Can I modify the page length requirements in AI Job Search?

No. The limits are hardcoded into the verification logic within [`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py) and the template specifications in [`05-cv-templates.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/05-cv-templates.md). The CI/runtime checks are intentionally strict to maintain consistent, professional output standards across all generated applications.

### Why does the cover letter use `xelatex` while the CV uses `lualatex`?

The cover letter compilation specifically uses `xelatex` (whereas the CV uses `lualatex`) due to font handling requirements in the `cover.cls` class. Both engines produce PDFs that must satisfy the single‑page constraint enforced by the same [`verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/verify_pdf.py) checker.

### How does the framework check page counts programmatically?

The [`tools/verify_pdf.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/verify_pdf.py) script extracts the PDF page count using a PDF parser such as `pdftotext` and compares it against the required constants: 2 for CVs and 1 for cover letters. If the extracted count does not match the expected value, the script returns a non‑zero exit code that halts the workflow.