How the Career-Ops Cover Letter Generator Uses Keyword Mirroring for Personalized Applications

The cover letter generator in santifer/career-ops extracts 8-10 exact phrases from job descriptions and mirrors them around your existing CV achievements—without altering metrics—to create ATS-optimized, personalized cover letters.

The santifer/career-ops repository provides a structured workflow for generating job application materials through a disciplined keyword mirroring process. Unlike generic templates that simply swap company names, this system analyzes the exact vocabulary used in job descriptions (JD) and strategically weaves those phrases into your authentic experience narrative. The result is a cover letter that satisfies applicant tracking systems (ATS) while reading naturally to human recruiters.

What Is Keyword Mirroring in Career-Ops?

Keyword mirroring is the practice of extracting specific terminology from a job posting and reflecting it back in your application materials. In modes/cover.md, the generator implements this through a strict vocabulary-only approach—mirroring exact wording around your selected CV bullets without ever modifying the underlying metrics or achievements.

The 6-Step Keyword Mirroring Pipeline

The cover letter generator follows a mandatory sequence defined in modes/cover.md that ensures every mirrored keyword serves a specific purpose.

JD Validation (Step 0)

Before any extraction occurs, the system confirms a job description is present. This gate ensures the subsequent mirroring has a concrete source of keywords rather than generic industry terms.

Keyword Extraction (Step 4)

The parser identifies 8-10 exact phrases from the JD, categorizing them into:

  • ATS-critical: Technical titles, tool names, and methodologies that screening software scans for
  • Human-trust signals: Action verbs, product nouns, and outcome language that demonstrate you read the posting

The extracted list displays to the user for confirmation before drafting begins, preventing off-target terminology from entering your letter.

Application Rules and Constraints

Once keywords are locked, the generator enforces strict mirroring rules in modes/cover.md:

  • Vocabulary only: Exact wording injects around CV bullets, never inside metric numbers
  • Natural fit: Keywords must flow fluidly; awkward matches are flagged for manual review
  • One-time use: Each keyword appears at most once to avoid stuffing
  • Scope limitation: Mirroring applies only to the opening paragraph, profile intro, and achievement bullets—not to the "why-this-role" or closing sections

These constraints preserve your authentic narrative while ticking ATS boxes.

Achievement Selection (Step 7)

The system selects four to five bullets directly from cv.md (or article-digest.md for supplemental metrics). These achievements are then re-phrased with JD keywords inserted around the original phrasing, ensuring metrics remain untouched and verifiable.

Draft Generation (Step 8)

The final letter assembles in chat, respecting your chosen tone (formal, direct, conversational, or "mirror the JD"). Because keywords are already woven into the draft, the letter demonstrates keyword mirroring without artificial density. Users review the draft before PDF generation.

PDF Production (Step 9)

Upon approval, the payload—including mirrored keywords—passes to generate-cover-letter.mjs. This script reuses the same HTML + Playwright pipeline defined in modes/pdf.md that powers the CV generator, yielding an A4 PDF that retains keyword-rich content for ATS parsing while preserving human-readable styling.

Code Implementation: From JD to PDF

To initiate the keyword mirroring workflow:


# Start from a saved JD using slug mode

/career-ops cover 042-company-role

# Or start fresh with a new JD

/career-ops cover

After Step 4, the system displays extracted keywords for confirmation:

Keywords I'll mirror from the JD:

ATS‑critical:
  • "data pipelines"
  • "Kubernetes"

Language signals:
  • "drive performance"
  • "collaborate across teams"

Anything missing or wrong? (user confirms)

The rephrased achievements maintain your original metrics while incorporating the mirrored vocabulary:

• **Built**, data pipelines that processed >10 TB/day, improving throughput by 45%.

Finally, the payload JSON passed to generate-cover-letter.mjs contains the mirrored content:

{
  "letter": {
    "role_title": "Senior Data Engineer",
    "company": "Acme Corp",
    "achievements": [
      { "lead": "Built", "impact": "data pipelines that processed >10 TB/day, improving throughput by 45%" }
    ],
    "opening": "I'm excited to bring my experience in building data pipelines to Acme's mission-driven team."
  }
}

The PDF generator processes this payload:

node generate-cover-letter.mjs --payload /tmp/cover-payload-acme.json

Summary

  • Keyword mirroring in santifer/career-ops extracts 8-10 exact phrases from job descriptions without altering your CV metrics
  • The workflow in modes/cover.md enforces vocabulary-only substitution, one-time use per keyword, and scope limitations to prevent stuffing
  • ATS-critical terms and human-trust signals are categorized and user-confirmed before drafting
  • Achievements are selected from cv.md or article-digest.md and rephrased with mirrored keywords around original metrics
  • Final output is generated via generate-cover-letter.mjs using the HTML + Playwright pipeline shared with the CV generator

Frequently Asked Questions

Does keyword mirroring change my actual achievements or metrics?

No. According to the application rules in modes/cover.md, the system applies vocabulary-only mirroring. Keywords are inserted around your selected CV bullets—modifying the surrounding language—but your original metrics, percentages, and quantitative impacts remain completely untouched.

How does the generator prevent keyword stuffing?

The system enforces three specific constraints: each keyword may be used at most once, only 8-10 exact phrases are extracted from the JD, and mirroring is limited to specific sections (opening paragraph, profile intro, and achievement bullets). The "why-this-role" and closing sections remain free of mirrored terms to ensure natural flow.

Can I review the keywords before they are used in my cover letter?

Yes. After Step 4 completes in modes/cover.md, the generator displays the extracted ATS-critical and human-trust signal keywords for your confirmation. You can flag missing terms or remove inappropriate matches before the drafting phase begins, ensuring the final letter reflects accurate terminology.

What files are involved in generating the final PDF?

The process involves modes/cover.md (workflow logic), cv.md or article-digest.md (source achievements), and generate-cover-letter.mjs (PDF generation). The PDF engine reuses the HTML + Playwright pipeline defined in modes/pdf.md, ensuring consistent styling between your CV and cover letter outputs.

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 →