---
description: Resume Tailor — produces an ATS-optimized, JD-aligned resume from master CV + JD analysis. Two-stage pattern (Tier 2 sub-agent extracts JD keywords, Tier 4 Opus drafts). Outputs markdown + Reactive Resume PDF. Triggered by 'tailor resume for [company]', '/tailor-resume', or after JD analysis returns RECOMMEND APPLY.
---

# personal-resume-tailor

Tailors the master CV to a specific JD. **Future-employer-content carve-out applies — Tier 4 in main session, no exceptions.**

## Trigger phrases

- "Tailor resume for [company]"
- "Tailor my resume for the [role] at [company]"
- `/tailor-resume [slug]`
- After `personal-jd-analyzer` returns RECOMMEND APPLY

## Inputs (mandatory)

- `~/.career/master-cv.md` — the comprehensive source of truth
- `~/.career/applications/{slug}/01-jd-analysis.md` — JD analysis from previous skill run
- `~/.career/voice-profile.md` — voice rules
- `~/.career/star-bank.json` — STAR stories (for matching to JD keywords)

## Process

### Stage 1 — Sub-agent research (Tier 2 Haiku)

Delegate to `research` sub-agent. Returns ≤500-token structured output:

```
## JD keyword extraction

Top 12 keywords (frequency + position-weighted from JD):
1. [keyword] — appears in [section]
2. ...

## Required skills checklist

- [skill] — present in master CV [yes/no, where]
- ...

## Tone / voice signal from JD

[2-3 lines: formal/casual, technical depth, what kind of person they're hiring for]

## Recommended STAR stories (from star-bank)

1. [story-id] — fits because [keyword/competency]
2. ...
```

### Stage 2 — Main session draft (Tier 4 Opus)

You (the main session) draft the resume using:

- The sub-agent's keyword extraction
- The master CV (full)
- The voice profile
- The JD analysis from `01-jd-analysis.md`

**Discipline:**

- Length: 1 page for <10 yrs experience, 2 pages for 10+. Hard cap.
- Top of resume: 3-line summary aligned to JD keywords. No "results-driven professional" cliches.
- Each bullet: STAR-compressed (situation, action, RESULT with metric). Lead with the metric where possible.
- Keywords from JD appear in prose, not in a "Skills" keyword stuffing block (ATS treats keyword-stuffing as low signal in 2026).
- "Skills" section: technical skills only, grouped by category, max 4 lines.
- Education: school, degree, year. No GPA unless very recent / very high.
- Em-dash ban: literal grep before output. Zero hits.
- Voice profile: read aloud (mentally). Sounds like Josh, not generic candidate.

### Stage 3 — Output

Two files written to `~/.career/applications/{slug}/`:

**`02-resume.md`** — the markdown source
**`02-resume.docx`** OR posted via Reactive Resume self-hosted API for **`02-resume.pdf`**

If Reactive Resume is running locally (Docker compose at `~/.career/reactive-resume/`), POST the markdown to its API. Otherwise, use `pandoc` to convert markdown → docx → pdf:

```bash
pandoc -f markdown -t docx -o ~/.career/applications/{slug}/02-resume.docx ~/.career/applications/{slug}/02-resume.md
```

### Stage 4 — Voice smell test (mandatory before "done")

Run these checks against `02-resume.md`:

1. Em-dash literal grep — must be 0
2. AI-cliché grep: "leverage", "synergy", "passionate", "results-driven", "self-starter", "team player", "go-getter" — ideally 0, hard cap 1
3. Personal-pronoun line-start ratio — count lines starting with "I" / "I'm" / "My" — target <30% on cover letters; resumes should have NO "I" since bullets start with verbs
4. Length check — page count meets target
5. Master-CV diff — what was added/removed/reframed? Keep a diff log at `02-resume-diff.md`

### Stage 5 — Tracker update

Update the JOB-* tracker item:

```
status: evaluating → ready_to_send
next_action: cover letter
artefacts: [02-resume.md, 02-resume.pdf]
```

## Pre-publish gate (mandatory)

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

- **subagent_type:** `evaluator`
- **prompt:** include the tailored resume body, the JD it was tailored against, and the master CV section that supplied each bullet. Ask for the standard 4-axis rubric: factual accuracy (no inflated metrics), voice match (em-dash + cliché check), action clarity (verbs, specificity), citation correctness (every metric traceable to master CV).

Handle the evaluator's response:

| Result | Action |
| --- | --- |
| All 4 axes pass | Proceed to "Output format" 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. |
| 3+ axes fail | Surface the evaluator's full feedback to Josh and ask for direction before re-drafting. |

This gate is non-negotiable for resumes. Hallucinated metrics or voice drift on a resume cost interviews; the gate cost is ~$0.02 and is the cheapest insurance available.

## Output format (chat response to Josh)

```markdown
**Tailored resume ready** for [Company] — [Role]

**Path:** `~/.career/applications/{slug}/02-resume.md` + `.pdf`

**Voice Smell Test:**
- Em-dash count: 0 ✓
- AI clichés: 0 ✓
- Length: 1.8 pages (within 2-page cap) ✓
- Keyword alignment: 11/12 JD keywords present ✓

**Key changes from master CV:**
- [bullet]
- [bullet]
- [bullet]

**Voice profile applied:** v[N]

**Next:** Run `/cover-letter {slug}` to draft the cover letter.

**Open questions:**
- [Anything the AI couldn't decide]
```

## Privacy rule

The resume version saved to the application folder includes full PII (phone, address, email). A scrubbed version (PII redacted) goes to `~/.career/applications/{slug}/02-resume-public.md` for any portfolio sharing.
