---
description: Cover Letter — drafts a voice-matched, JD-tailored cover letter capped at 350 words. Tier 4 main session. Anti-AI-tells gates. Triggered by 'cover letter for [company]', '/cover-letter', or after resume tailoring completes.
---

# personal-cover-letter

The cover letter is voice-sensitive future-employer-content. **Tier 4 in main session. No exceptions.**

Most AI-written cover letters scream AI from sentence one. The discipline below exists to prevent that.

## Trigger phrases

- "Cover letter for [company]"
- "Draft a cover letter for the [role] at [company]"
- `/cover-letter [slug]`
- After `personal-resume-tailor` completes (auto-suggest)

## Inputs

- `~/.career/applications/{slug}/01-jd-analysis.md`
- `~/.career/applications/{slug}/02-resume.md`
- `~/.career/voice-profile.md`
- `~/.career/star-bank.json`
- `~/.career/companies/{company-slug}/brief.md` (if exists, otherwise prompt to run `/company-research`)

## Hard rules

- **Max 350 words.** Hiring managers spend 30-60 seconds. Brevity wins.
- **4 paragraphs max:** hook / specific connection / value proposition / close.
- **First sentence:** NEVER "I am writing to apply for...". NEVER "I'm excited to submit my application...". Open with something concrete and earned.
- **No buzzwords:** the AI-cliché list (leverage, synergy, passionate, dynamic, results-driven, self-starter, go-getter, ecosystem, holistic, robust). 0 hits, full stop.
- **No em-dashes.** Literal grep, zero hits.
- **Personal-pronoun ratio:** <50% of sentences starting with "I". Mix subjects.
- **Specific over generic:** "saved $X" / "reduced Y by Z%" / "led the migration of N teams" beats "drove impact and outcomes."
- **Show you've read the company:** at least one sentence references something specific about the company (recent product launch, blog post, mission framing, leadership move). The company-brief file feeds this.

## Voice profile application

Read `~/.career/voice-profile.md` carefully. Common rules to expect:

- Conversational but not casual
- Concrete over abstract
- Active voice
- No corporate boilerplate
- Stories not adjectives

If the voice profile is empty (first run), draft a starter version and ask Josh to refine.

## Process

### Stage 1 — Research (Tier 2 sub-agent)

Delegate `research`: re-read JD analysis + company brief + master CV, return ≤300-token brief on:

- The company-specific hook (what to reference in para 2)
- The 1-2 STAR stories that fit best
- The "why this company" framing

### Stage 2 — Draft (Tier 4 main, Opus)

You write the letter. Follow the 4-paragraph structure:

**Para 1 — Hook (40-60 words)**
Concrete, earned, specific. NOT a recap of the JD. Examples:

- "Three years of running production CSM workflows at Cloudflare taught me that the gap between 'platform exists' and 'customer adopts' is where the real work is. That's exactly the gap your Customer Engineering team is built to close."
- (Note the lack of "I'm excited" — assume excitement, demonstrate it.)

**Para 2 — Specific connection (60-90 words)**
What about THIS company that you're applying to. Reference a real thing — recent post, product, value, a person if you've talked to one.

**Para 3 — Value prop (90-120 words)**
The 1-2 STAR-compressed stories that map to what they need. Lead with metrics. Result-first sentences.

**Para 4 — Close (40-60 words)**
Forward-looking, specific, no canned closer. NOT "I look forward to hearing from you." A real ask.

### Stage 3 — Voice smell test (mandatory before output)

Run all 5 checks before outputting:

1. Word count ≤ 350
2. Em-dash literal grep = 0
3. AI-cliché grep against the list above = 0
4. Personal-pronoun ratio < 50%
5. Read aloud (mentally) — does it sound like Josh, or generic?

If any check fails, fix and re-run. Do not output a draft that fails.

### Stage 4 — Output

Save to `~/.career/applications/{slug}/03-cover-letter.md`.

Update the JOB-* tracker:

```
status: ready_to_send (now both resume + cover letter present)
artefacts: [..., 03-cover-letter.md]
```

## Pre-publish gate (mandatory)

This is a future-employer-content artefact. Before showing the draft to Josh, invoke the `evaluator` sub-agent via the Task tool:

- **subagent_type:** `evaluator`
- **prompt:** include the full draft body, the JD source (or company brief), and the master CV context the draft was built from. Ask for the standard 4-axis rubric: factual accuracy, voice match, action clarity, citation correctness.

Handle the evaluator's response:

| Result | Action |
| --- | --- |
| All 4 axes pass | Proceed to "Output to Josh" below. |
| 1-2 axes fail | Revise the draft addressing the specific failures (single revision pass). Re-invoke evaluator. If second result still fails, surface BOTH versions to Josh and the evaluator's specific objections. Do not silently ship the second version. |
| 3+ axes fail | Don't revise blindly -- the draft has structural issues. Surface the evaluator's full feedback to Josh and ask for direction before re-drafting. |

This gate is non-negotiable for cover letters. The future-employer-content carve-out (AGENTS.md) makes voice and accuracy load-bearing for this skill specifically.

## Output to Josh

```markdown
**Cover letter ready** for [Company] — [Role]

**Path:** `~/.career/applications/{slug}/03-cover-letter.md`

**Word count:** [N] / 350

**Voice Smell Test:**
- Em-dashes: 0 ✓
- AI clichés: 0 ✓
- I-pronoun ratio: [N]% ✓
- Specific company reference: yes ([what])

**Hook strategy:** [1-line summary]
**STAR stories used:** [story-ids from bank]

**Inline preview:**

---
[paste the letter here]
---

**Open questions:**
- [Anything Josh should review before sending]

**Next:** review and adjust voice. After this iteration, the voice profile gets updated with any corrections you make.
```

## Voice profile feedback loop

After Josh edits the letter, the diff between AI draft and Josh-final goes back into the voice profile. This is how the AI gets sharper at sounding like Josh over time. Capture: what was changed, what voice rule it implies, append to `~/.career/voice-profile.md`.
