mcpbeat

Resume Tailor

borghei/resume-tailor

> Tailor a resume to a job description by extracting keywords, scoring match, and rewriting bullets for impact. Use when applying to a role, optimizing for ATS keyword match, or customizing a cover letter.

5k tokens
context cost
the whole folder, loaded on every use
5
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
447
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/borghei/Claude-Skills --skill resume-tailor

What comes with it

15 818 bytes besides the instruction
assets/tailored_resume_template.md
references/ats_optimization_guide.md
references/bullet_rewrite_patterns.md
scripts/resume_matcher.py

The instruction itself

16 sections, as written by the author

Resume Tailor

Tailor a base resume to a specific job description with keyword-match scoring, gap analysis, and rewritten-bullet suggestions.


Table of Contents

  • Keywords
  • Quick Start
  • Core Workflows
  • Tools
  • Reference Guides
  • Templates
  • Best Practices

Keywords

resume, CV, job application, ATS, applicant tracking system, keyword match, resume tailoring, cover letter, job description, hiring, recruiter, career, job search, bullet rewrite, accomplishment, impact statement


Clarify First

Before tailoring the resume, confirm these inputs. If any is unknown or vague, ASK — do not assume:

  • [ ] Target job description — the verbatim JD; it drives keyword extraction and the entire match score
  • [ ] Base resume content — your actual experience and bullets; without it there is nothing to score or rewrite
  • [ ] Target seniority / title — IC vs lead vs exec sets which keywords matter and the altitude of rewritten bullets
  • [ ] Truth boundary — which listed skills you genuinely have vs. aspirational, so additions are honest rather than keyword-stuffed

Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.


Quick Start

Tailor a Resume in 5 Minutes

  • Save the job description as jd.txt
  • Save your base resume text as resume.txt
  • Run the matcher:
   python scripts/resume_matcher.py resume.txt jd.txt
  • Review the keyword-gap report
  • Rewrite low-scoring bullets using references/bullet_rewrite_patterns.md
  • Cross-check the final resume against the rewritten template in assets/tailored_resume_template.md

Core Workflows

Workflow 1: Match Score and Keyword Gap

Goal: Get a quantitative score for how well the current resume matches a target job description before submitting.

Steps:

  • Capture the job description verbatim into jd.txt
  • Run: python scripts/resume_matcher.py resume.txt jd.txt
  • Review the score — anything below 70% means significant gaps
  • Read the missing-keywords list; classify each as (a) skills you have but did not list, (b) skills you do not have, (c) buzzwords that do not apply
  • Add (a) to the resume; ignore (c); be honest about (b)

Expected Output: A score, a kept-keyword list, and a missing-keyword list.

Time Estimate: 5-10 minutes per job description.

Workflow 2: Bullet Rewrite for Impact

Goal: Convert task-oriented bullets ("responsible for…") into impact bullets that match recruiter and ATS expectations.

Steps:

  • Identify weak bullets — anything starting with "Responsible for" or "Helped with"
  • Apply the CAR pattern (Challenge, Action, Result) from references/bullet_rewrite_patterns.md
  • Quantify wherever possible (percentages, dollar amounts, time saved, scale)
  • Re-run the matcher to confirm score improvement

Expected Output: Bullet list rewritten in CAR format with metrics.

Time Estimate: 5 minutes per bullet.

Workflow 3: Cover Letter Hooks

Goal: Pull the strongest 3-5 hooks from the resume that map directly to the top requirements in the job description.

Steps:

  • Run matcher in JSON mode: python scripts/resume_matcher.py resume.txt jd.txt --json
  • Take the top 5 matched keywords by relevance
  • For each, find the matching resume bullet
  • Use them as evidence sentences in the cover letter

Expected Output: 3-5 evidence sentences for the cover letter.

Time Estimate: 10 minutes.


Tools

resume_matcher.py

Reads a resume text file and a job description text file, returns:

  • A match score (0-100) based on keyword overlap weighted by JD frequency
  • A kept keywords list (in both resume and JD)
  • A missing keywords list (in JD only)
  • A resume-only keywords list (in resume but not JD — candidate to drop)
# Human-readable
python scripts/resume_matcher.py resume.txt jd.txt

# JSON for programmatic use
python scripts/resume_matcher.py resume.txt jd.txt --json

Reference Guides

  • references/bullet_rewrite_patterns.md — CAR pattern, action-verb library, quantification examples, weak-phrase blacklist
  • references/ats_optimization_guide.md — How ATS parses resumes, formatting do's and don'ts, keyword density bounds

Templates

  • assets/tailored_resume_template.md — A bare resume skeleton with section ordering, length guidance, and keyword-placement notes. Fill in your content.

Best Practices

  • Tailor every time. A generic resume sent to ten roles performs worse than ten tailored versions.
  • Honesty over keyword stuffing. Add only skills you actually have. Hiring managers can tell.
  • Keep one master resume. Tailor variants from a single source of truth.
  • Two pages max. Even for senior roles, two pages is the ceiling outside academia.
  • Plain text, single-column. ATS systems still mishandle tables, graphics, and multi-column layouts.

Integration Points

  • Pairs with personal-productivity/lead-researcher/ for prepping informational interviews
  • Pairs with marketing/copywriting/ for cover letter prose quality
  • Used by agents/personas/ workflows when authoring sample profiles

How to use it

Copy the folder

Take borghei/resume-tailor from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.