Cover Letter Writing Style Rules in the AI‑Job‑Search Project
The AI‑Job‑Search project enforces a comprehensive, rule‑based style guide—defined in .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).
-
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).
-
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).
-
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).
-
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).
-
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).
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).
Conversational professional. Avoid stiff corporate jargon; the target voice resembles a poised interviewee rather than a press release (Line 19).
First‑person active voice. Constructions like “I built” or “I optimized” are required; passive voice is flagged and corrected (Line 20).
Demonstrate, don’t state. Traits must be proven through specific outcomes rather than declared outright (Line 21).
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).
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).
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).
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).
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).
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).
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).
Enforcement and Implementation
The /apply command in .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:
# 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:
# 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:
# 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.mdgoverns 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
/applycommand 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. 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.
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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →