# Cover Letter Writing Style Rules in the AI‑Job‑Search Project

> Discover cover letter writing style rules for the AI-Job-Search project. Learn about first-person active voice, evidence-based claims, and prohibited elements for your job application.

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

---

**The AI‑Job‑Search project enforces a comprehensive, rule‑based style guide—defined in [`.claude/skills/job-application-assistant/03-writing-style.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/03-writing-style.md)—that mandates first‑person active voice, concrete evidence for every claim, and strict prohibitions on em‑dashes, clichés, and unverified company statements before generating any PDF.**

The MadsLorentzen/ai-job-search repository automates technical job applications using Claude AI, embedding rigorous writing style rules for cover letters directly into the `/apply` command workflow. Every draft is validated through a compilation and inspection loop that references specific line‑level guidelines to ensure submissions remain concise, fact‑checked, and precisely tuned to target roles.

## Critical Content Rules

The style guide defines six non‑negotiable constraints that apply to every cover letter generated by the system. Violations trigger automatic re‑drafting before the LaTeX compilation stage.

- **No em‑dashes.** The guide explicitly forbids the use of “--” in favor of commas, periods, or sentence restructuring to maintain professional typography ([Lines 5‑6](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L5-L6)).

- **No clichés or filler.** Phrases such as “I am passionate about” or “leverage my skills” are automatically stripped to eliminate generic corporate speak ([Lines 6‑7](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L6-L7)).

- **No buzzwords without evidence.** Every competency claim must be backed by a concrete example, tool, or metric; abstract adjectives are rejected during verification ([Line 8](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L8)).

- **No apologetic or humble language.** Contributors must state value confidently using constructions like “I bring X, demonstrated by Y” rather than hedging or downplaying achievements ([Line 9](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L9)).

- **No unverified company claims.** Any statement about the target organization—culture, recent news, or technical stack—must be confirmed via WebFetch or WebSearch before inclusion ([Line 10](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L10)).

- **Reframe, don’t fabricate.** Experience may be reordered or emphasized only when the candidate can explain the narrative without “backtracking” or inventing responsibilities ([Lines 11‑14](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L11-L14)).

## Tone and Voice Guidelines

Beyond content restrictions, the guide dictates a specific tonal framework that balances professionalism with approachability.

**Warm but direct.** The writing must be friendly and confident, eschewing both arrogance and casual slack ([Lines 16‑18](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L16-L18)).

**Conversational professional.** Avoid stiff corporate jargon; the target voice resembles a poised interviewee rather than a press release ([Line 19](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L19)).

**First‑person active voice.** Constructions like “I built” or “I optimized” are required; passive voice is flagged and corrected ([Line 20](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L20)).

**Demonstrate, don’t state.** Traits must be proven through specific outcomes rather than declared outright ([Line 21](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L21)).

## Structural Requirements

The style guide mandates a rigid architectural framework to maximize scannability and impact within a single page.

### Application Headline

The opening must consist of one sentence combining the candidate’s title or education with a keyword from the job posting. For example: “Data‑Science Engineer specializing in Real‑Time Forecasting” ([Lines 22‑30](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L22-L30)).

### Scannable Layout

Documents must remain under one page using descriptive sub‑headings, embedded keywords from the posting, and concise language to facilitate rapid recruiter review ([Lines 31‑38](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L31-L38)).

### Forward‑Looking Framing

The cover letter must focus on tasks the candidate will solve for the employer, using only one to two short past examples as proof. It should not repeat the CV ([Lines 39‑46](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L39-L46)).

### Fixed Section Structure

The document follows a mandatory sequence: **Opening** (name the role in one sentence) → **Body** (task‑solving focus) → **Motivation/Why this company** → **Company‑specific paragraph** (evidenced claims only) → **Closing**. Each section carries precise content expectations defined in lines 47 through 78 of the style guide ([Lines 47‑78](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L47-L78)).

## Role‑Specific Language and Formatting

Technical execution varies by industry vertical and language context.

### Bullet‑Point Style

All lists must begin with action verbs or bold labels, include quantifiable outcomes (numbers, tools, business impact), and vary wording to avoid repetition ([Lines 79‑83](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L79-L83)).

### Domain‑Tailored Vocabulary

- **Technical/ML roles:** Emphasize programming languages, frameworks, and dataset specifics.
- **Domain expertise:** Highlight methodologies and sector‑specific knowledge.
- **Consulting:** Focus on stakeholder management and delivery outcomes.
- **Leadership:** Detail team size, mentorship, and strategic initiatives ([Lines 84‑101](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L84-L101)).

### Multi‑Language Applications

Cover letters must match the language of the job posting. Translation should be adaptive rather than literal, allowing slightly warmer tonal adjustments where culturally appropriate ([Lines 103‑107](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/skills/job-application-assistant/03-writing-style.md#L103-L107)).

## Enforcement and Implementation

The `/apply` command in [`.claude/commands/apply.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/apply.md) orchestrates a three‑stage enforcement pipeline that guarantees compliance before any submission.

**1. Drafting Phase**

The system loads the style guide and injects it into the language model prompt:

```python

# Load style guide from repository root

style_path = ".claude/skills/job-application-assistant/03-writing-style.md"
style_guide = load_markdown(style_path)

# Construct constrained prompt

prompt = f"""Write a cover letter for {role} at {company} following these rules:\n{style_guide}"""
cover_tex = claude.generate(prompt)

```

**2. Verification Loop**

After `xelatex` compilation, automated checks scan the generated `.tex` files for rule violations. For example, the “no em‑dash” rule is enforced via grep before PDF finalization:

```bash

# Check for forbidden em-dash characters

if grep -q -- '--' cover_letters/cover_*.tex; then
    echo "❌ Em‑dash found – removing per rule 1"
    sed -i 's/--/,/g' cover_letters/cover_*.tex
fi

```

Company claims undergo external verification:

```python

# Verify factual accuracy before acceptance

if not webfetch.verify_claims(cover_tex):
    raise ValidationError("Unverified company claim – delete or rephrase")

```

**3. Human Review**

The compiled PDF is presented for final approval only after passing the automated checklist. The `cover_letters/cover_example.tex` file serves as the structural reference and CI smoke test to validate that style constraints render correctly within page limits.

## Summary

- **Style guide location:** [`.claude/skills/job-application-assistant/03-writing-style.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/03-writing-style.md) governs all cover letter writing style rules for the project.
- **Critical prohibitions:** Em‑dashes, clichés, unsupported buzzwords, apologetic language, and unverified company facts are banned.
- **Required tone:** Warm, direct, first‑person active voice with demonstrated evidence for every claim.
- **Structure:** One‑page limit with specific headline format, forward‑looking framing, and five mandatory sections.
- **Enforcement:** The `/apply` command validates content via automated LaTeX compilation and web verification before human review.

## Frequently Asked Questions

### Where are the cover letter writing style rules defined in the repository?

All rules are codified in [`.claude/skills/job-application-assistant/03-writing-style.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-application-assistant/03-writing-style.md). This file is referenced by the `/apply` command to constrain Claude’s output during the drafting phase.

### How does the project prevent em‑dash usage in cover letters?

The system runs a post‑compilation grep check against `cover_letters/cover_*.tex`. If double hyphens (“--”) are detected, a sed command automatically replaces them with commas or periods before the PDF is finalized.

### What is the required structure for cover letters in the AI‑Job‑Search workflow?

Documents must follow a fixed five‑part structure: Opening (role name), Body (task‑solving focus), Motivation, Company‑specific paragraph (verified facts only), and Closing. The entire document must remain under one page with descriptive sub‑headings.

### How are company‑specific claims verified before submission?

Any statement regarding the target company must pass through a `webfetch.verify_claims()` check that confirms the information via WebFetch or WebSearch. Unverified claims trigger a `ValidationError` and block PDF generation until corrected or removed.