# Resume Tailor

> Use when the user says "tailor my resume," "make this ATS-friendly," or points at a specific job. Reworks the master resume to one JD, mirrors real keywords, runs an ATS check, and reports coverage plus unmet must-haves. Zero fabrication.

- Skill: `guerrilla2799/resume-tailor` (Agent Skill)
- Install (CLI): `npx skillmds@latest add guerrilla2799/resume-tailor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/guerrilla2799/resume-tailor/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: guerrilla2799 (https://skillmd.com/u/guerrilla2799)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/guerrilla2799/resume-tailor

---


# Resume Tailor

Turn one master resume into a role-specific, ATS-readable resume that mirrors the JD's real language and shows the gaps instead of hiding them.

## When to use
- User says "tailor my resume for this job," "optimize for ATS," "make a version for <company>."
- A pipeline row hits `status: tailoring`.
- The user pastes a JD and wants a matching resume.

## Inputs
- Reads:
  - `workspace/documents/master-resume.md` – the single source of truth for real experience, titles, dates, and numbers.
  - The job description, from `workspace/pipeline/applications/<id>-company-role.md` (the "Why this role" / job URL) or pasted directly.
  - `workspace/profile/target-roles.md` – for level/track context if the JD is thin.
  - `templates/resume-template.md` – output skeleton.
  - `docs/ats-guide.md` – parser-safe formatting rules (see Rules).
- Needs from user:
  - The JD text or URL (ask if neither is on file, and never guess the requirements).
  - The application `id` (so output lands as `<id>-resume.md`). If none exists yet, ask the tracker/setup step to mint one, or use a temporary `Jxxx` and flag it.

## Workflow
1. **Locate the JD.** Pull it from the `applications/<id>` file or the pasted text. If missing, stop and ask. Do not draft against an assumed spec.
2. **Extract the requirements ledger.** From the JD, list:
   - Hard requirements / must-haves (years, degrees, named tools, certifications).
   - Nice-to-haves.
   - Exact keyword phrasing the ATS scans: job title variants, skills, tools, methodologies, acronyms + their spelled-out forms (e.g. "ABM (account-based marketing)"). Copy the JD's spelling, not a synonym.
3. **Map each item to real evidence.** For every requirement, find the line in `master-resume.md` that proves it. Mark each as: **Met** (with the source bullet), **Partial** (adjacent experience), or **Missing** (no real evidence). Never invent a bullet to fill a Missing.
4. **Draft the tailored resume** from `templates/resume-template.md` into `workspace/output/<id>-resume.md`:
   - Rewrite the summary to name the target role and lead with the strongest Met proof.
   - Reorder and rewrite experience bullets so the most JD-relevant land first. Lead with impact + quantified outcome pulled verbatim-in-spirit from the master (numbers unchanged).
   - Mirror the JD's exact keywords **only where true**. Insert the spelled-out + acronym pairing so both forms are parseable.
   - Cut anything irrelevant to this role. Relevance beats completeness. One page for under 10 years, two for senior. A tight one beats a padded two.
   - Group the Skills section to front-load JD-named skills the candidate actually has.
5. **Run the ATS check** (see rubric below) and write the coverage report + gap list into the output file.
6. **Slop gate.** Run the `writing-quality` skill over the drafted resume to kill AI tells, hollow verbs, and filler. Resume prose is terse by nature, so the gate mostly catches summary-line slop and inflated adjectives.
7. **Eval gate.** Submit the resume to the `artifact-eval` skill (resume spec). If it returns REVISE/FAIL, fix the named issues and re-submit. Do not mark final until PASS.
8. **Log it.** Update the `applications/<id>` Materials section with the resume path, keywords targeted, and the gap list. Hand the status change (`tailoring → applied` once submitted) to `application-tracker`. This skill does not flip to `applied` on its own, since a human still has to submit.

## ATS check rubric
Run every tailored resume against this before it's final.

**Keyword coverage**
- Coverage % = (JD must-have keywords present in resume, truthfully) ÷ (total JD must-have keywords). Report the number.
- Target ≥ 75% on must-haves. Below that, the miss is usually a real gap, not a wording problem. Surface it, don't stuff.
- No keyword stuffing, no white-text tricks, no skills the candidate can't defend in an interview.

**Formatting that breaks parsers** (all must be false)
- [ ] No tables, multi-column layouts, or text boxes.
- [ ] No images, logos, icons, or charts.
- [ ] No content in headers/footers (many parsers drop them). Contact info goes in the body.
- [ ] Standard section headings only: Summary, Experience, Skills, Education, Certifications.
- [ ] Real selectable text (not a flattened or scanned PDF), reverse-chronological order.
- [ ] Simple round bullets, no wingding glyphs, and no nested tables for indentation.
- [ ] One standard font, consistent date format (`Mon YYYY`).

**Gap visibility** (the honesty check)
- Every JD must-have with no real evidence appears in the "Must-haves NOT met" list.
- No bullet, number, title, date, or credential exists that isn't traceable to `master-resume.md`.

## Output
- Writes to: `workspace/output/<id>-resume.md` (the tailored resume).
- Appends to: `workspace/pipeline/applications/<id>-company-role.md`, the Materials section (path, angle, keywords) and the gap list.
- Format: the resume in `resume-template.md` structure, followed by a fenced report block:
  ```
  ## ATS Report: <id>
  Keyword coverage: N% (X of Y must-haves)
  Must-haves met: [...]
  Must-haves NOT met (gaps, human decides): [...]
  Formatting: PASS / issues: [...]
  writing-quality: PASS | artifact-eval: PASS (resume v<ver>, score N)
  ```

## Rules & quality bar
- **No fabrication.** Not experience, not numbers, not titles, not dates, not credentials. If it isn't in the master resume, it doesn't go in.
- **Gaps stay visible.** The gap list is a feature. It tells the human where to expect pushback and whether to apply at all.
- **Relevance > completeness.** Cutting the wrong-fit bullets is the tailoring. a longer resume is not a better one.
- **Mirror, don't parrot.** Use the JD's exact terms only where they're genuinely true of the candidate.
- **Human submits.** This skill never auto-applies. It produces the file. A person sends it.
- **One JD per pass.** Don't blend two postings into a Frankenstein resume.
- Ends only after `writing-quality` PASS and `artifact-eval` (resume spec) PASS.

## Related skills
- `job-fit-scoring` – run first. Its fit breakdown pre-identifies the gaps you'll surface here.
- `company-research` – sharpens the summary line and which keywords actually matter.
- `cover-letter` – pairs with the tailored resume and shares the chosen angle.
- `writing-quality` – mandatory slop gate before final.
- `artifact-eval` – mandatory PASS (resume spec) before final.
- `application-tracker` – owns the status flip and stores the record.
- `search-and-scale-os` – orchestrator that calls this during the tailoring stage.

