Drafter-Reviewer Separation in AI Job Search: A Two-Agent Workflow for Better Applications

The Drafter-Reviewer Separation principle splits job application creation into two distinct AI agents—a Drafter that generates initial CVs and cover letters, and a Reviewer with fresh context that critiques and refines them—to catch missed keywords, strengthen company-specific framing, and enforce factual accuracy.

The MadsLorentzen/ai-job-search repository implements a sophisticated multi-agent architecture designed to automate and optimize job applications using Claude AI. At the core of this system lies the Drafter-Reviewer Separation principle, an architectural pattern that deliberately separates content generation from critical review to eliminate the blind spots inherent in single-pass AI generation. This two-stage workflow ensures every application is both meticulously tailored and rigorously fact-checked before submission.

What Is the Drafter-Reviewer Separation Principle?

The Drafter-Reviewer Separation principle is a deliberate architectural pattern that partitions the job-application workflow into two specialized agents with distinct responsibilities. Rather than allowing a single AI instance to both write and judge content—which often results in overlooked errors and missed optimization opportunities—the system orchestrates a structured handoff between creation and critique phases.

The Drafter Agent

The Drafter serves as the initial content creator. According to the repository's command structure in .claude/commands/apply.md, this agent performs two primary functions: evaluating candidate fit against job requirements and generating the initial LaTeX documents. The Drafter reads the evaluation framework (.claude/skills/job-application-assistant/04-job-evaluation.md), the candidate profile (01-candidate-profile.md), and active templates to produce cv/main_<company>_<role>.tex and cover_letters/cover_<company>_<role>.tex.

The Reviewer Agent

The Reviewer operates as an independent quality assurance layer. The system explicitly spawns a fresh Claude agent with a clean context—ensuring no carryover from the drafting phase—to research the target company and critique the generated documents. This fresh context is critical because it prevents the confirmation bias that occurs when the same model instance evaluates its own output.

Why Two Agents Outperform a Single Pass

The separation creates a feedback loop that addresses three critical failure modes of automated job application systems:

  • Keyword Recovery: The reviewer re-examines the job posting against the drafts to identify missing required terms—such as specific technical skills or certifications—that the drafter omitted.

  • Strategic Framing: By conducting fresh company research, the reviewer suggests company-specific angles and tone adjustments that align the application with organizational culture and values.

  • Factual Grounding: The reviewer validates every date, metric, and claim against the three sources of truth: 01-candidate-profile.md, the master CV template, and CLAUDE.md.

Implementation in the AI Job Search Repository

The workflow is implemented as a six-step cycle defined in .claude/commands/apply.md, with clear boundaries between drafting and review phases.

Step 1: The Drafter Evaluates Fit and Creates Initial Drafts

The process begins with the Drafter agent executing evaluation and content generation:


## Step 1: DRAFTER – Evaluate Fit

Read evaluation framework (.claude/skills/job-application-assistant/04-job-evaluation.md)
and candidate profile (01-candidate-profile.md).  Present a fit score.

## Step 2: DRAFTER – Draft CV + Cover Letter

Use the active template (05-cv-templates.md, 06-cover-letter-templates.md)  
to produce `cv/main_<company>_<role>.tex` and `cover_letters/cover_<company>_<role>.tex`.

Step 2: The Reviewer Researches and Critiques

Step 3 introduces the Reviewer agent with explicit instructions to isolate context:


## Step 3: REVIEWER – Research & Critique

Spawn a fresh reviewer agent.  
Pass the drafts inline (do **not** read the files again) and include the job posting.

→ Produce **Part A**: JSON-structured edits (exact old → new strings).  
→ Produce **Part B**: Narrative suggestions (missing keywords, tone, company angles).

The Reviewer outputs structured feedback as JSON edits:

[
  {
    "file": "cv/main_acme_inc_data_scientist.tex",
    "old_string": "Experienced with Python",
    "new_string": "Experienced with Python (specifically pandas, numpy)",
    "reason": "keyword match"
  }
]

Step 3: The Drafter Revises and Finalizes

The Drafter returns to apply the Reviewer's structured edits and narrative suggestions:


## Step 4: DRAFTER – Revise Based on Feedback

Apply Part A edits directly, then address Part B suggestions.

## Step 5-6: PDF & ATS Verification

Compile PDFs, run `pdftotext` checks, and finalize the application.

Key Source Files and Configuration

The Drafter-Reviewer Separation principle relies on specific configuration files that serve as the system's grounding truth:

Summary

  • The Drafter-Reviewer Separation principle divides job application generation between two specialized AI agents to prevent single-pass errors.
  • The Drafter creates initial drafts using candidate profiles and job evaluations, while the Reviewer spawns with fresh context to critique and research.
  • This architecture specifically addresses keyword optimization, company-specific framing, and factual accuracy through structured feedback loops.
  • The implementation in MadsLorentzen/ai-job-search uses JSON-structured edits and narrative suggestions to facilitate precise revisions.
  • The workflow completes with automated PDF compilation and ATS validation checks.

Frequently Asked Questions

How does the Reviewer agent avoid bias from the drafting process?

The system explicitly spawns a fresh Claude agent with a clean context for the Reviewer role, ensuring no memory of the drafting conversation persists. According to the implementation in .claude/commands/apply.md, the Reviewer receives drafts inline rather than reading the files again, preventing any prior assumptions from influencing the critique.

What are the three sources of truth used for factual grounding?

The Reviewer validates all claims against three canonical documents: 01-candidate-profile.md (the candidate's structured profile), the master CV template, and CLAUDE.md (additional candidate information). This triangulation ensures dates, metrics, and qualifications remain accurate across all generated documents.

Can the Drafter-Reviewer cycle run multiple times?

While the standard workflow in apply.md specifies a single review cycle (Step 3) followed by revision (Step 4), the architecture supports iterative refinement. The structured JSON output format allows the Drafter to apply changes deterministically, and the process could theoretically loop until the Reviewer finds no further improvements, though the current implementation optimizes for a single high-quality pass to minimize API costs and processing time.

How is the Reviewer's feedback structured for the Drafter?

The Reviewer produces two distinct output formats: Part A contains machine-readable JSON arrays with file, old_string, new_string, and reason fields for precise text replacement; Part B provides narrative suggestions covering missing keywords, tone adjustments, and company-specific angles. This dual-format approach enables both automated edits and qualitative improvements.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →