agentleFS
mrlynnmrlynn/claude-skills/resume-tailorer/SKILL.md

resume-tailorer

Skill8 starsChanged 9 months agoMITView on GitHub

Customize resumes and cover letters for specific job postings with ATS optimization, keyword matching, and experience highlighting

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 9 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill when applying to jobs, customizing resumes for specific roles, or optimizing applications for Applicant Tracking Systems …

    line 19
  2. Distinctive:

    Not all experience is relevant.

    line 114
  3. Distinctive:

    Check keyword integration sounds natural

    line 321
  4. Distinctive:

    Verify quantified achievements are accurate

    line 322
  5. Distinctive:

    If job posting says "Drive adoption", use "Drove" (not "Led" or "Managed").

    line 349
  6. Distinctive:

    Rule of thumb: If you're uploading to an ATS, tailor it.

    line 382
  7. Distinctive:

    After tailoring, update your LinkedIn profile to mirror the keywords/achievements for that industry.

    line 387
  8. Distinctive:

    If applying to similar roles, try different keyword emphasis and track response rates.

    line 393
  9. Distinctive:

    Follow up 1 week after applying

    line 413

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

resume-tailorer

Trigger

Use this skill when applying to jobs, customizing resumes for specific roles, or optimizing applications for Applicant Tracking Systems (ATS).

Trigger phrases:

  • "Tailor my resume for this job"
  • "Customize cover letter"
  • "Match my experience to job requirements"
  • "Optimize for ATS"
  • "Rewrite resume for [role]"

Overview

Generic resumes get filtered out. Every job application needs a tailored resume that:

  1. Mirrors the job description language (ATS keyword matching)
  2. Highlights relevant experience (not all experience is equal)
  3. Quantifies achievements (numbers > vague claims)
  4. Passes ATS screening (formatting, keywords, structure)

This skill analyzes job postings, matches your experience to requirements, rewrites sections to highlight relevance, and generates ATS-optimized PDFs.

Not a resume builder from scratch - this assumes you have a master resume and tailors it per application.

How to Use

Quick Start

  1. Analyze job posting:
    python scripts/job_analyzer.py job-posting.txt --output analysis.json
  2. Match your experience:
    python scripts/resume_matcher.py master-resume.json analysis.json --output matches.json
  3. Generate tailored resume:
    python scripts/ats_optimizer.py master-resume.json matches.json --output tailored-resume.md

Python Tools

  • scripts/job_analyzer.py — Extract requirements, skills, keywords from job posting
  • scripts/resume_matcher.py — Match candidate experience to job requirements
  • scripts/ats_optimizer.py — Generate ATS-optimized resume and cover letter

Reference Docs

  • references/tailoring-strategies.md — Resume tailoring best practices
  • references/ats-best-practices.md — ATS optimization techniques

Templates & Assets

  • assets/resume-template.json — Structured resume format (master resume)
  • assets/cover-letter-template.txt — Customizable cover letter
  • assets/sample-job-posting.txt — Example job description

Architecture Decisions

Why JSON for Master Resume

A structured format enables:

  • Programmatic analysis and matching
  • Flexible reordering of experience
  • Easy keyword extraction
  • Version control friendly

Format:

{
  "contact": { "name": "...", "email": "...", "phone": "..." },
  "summary": "...",
  "experience": [
    {
      "title": "Senior Developer Advocate",
      "company": "MongoDB",
      "dates": "2015-Present",
      "achievements": [
        "Led 50+ customer workshops reaching 2,000+ developers",
        "Built RAG demo platform reducing integration time by 60%"
      ]
    }
  ],
  "skills": ["Python", "MongoDB", "Vector Search", "Public Speaking"]
}

Keyword Matching Strategy

ATS systems scan for exact keyword matches. Strategy:

  1. Extract keywords from job posting (nouns, skills, technologies)
  2. Find synonyms in candidate experience (e.g., "led" → "leadership")
  3. Rewrite bullet points to include exact job posting keywords
  4. Maintain natural language (not keyword stuffing)

Example:

  • Job posting: "Experience with vector databases and semantic search"
  • Original resume: "Built search functionality with embeddings"
  • Tailored: "Built semantic search using vector databases with MongoDB Atlas"

Experience Relevance Scoring

Not all experience is relevant. Score each role/achievement by:

  • Keyword overlap (30%): How many job keywords appear?
  • Recency (20%): Recent experience > old experience
  • Impact (30%): Quantified achievements > vague descriptions
  • Role alignment (20%): Title similarity to target role

Top 70% of scored experience goes in the tailored resume.

ATS-Friendly Formatting

ATS parsers struggle with:

  • ❌ Tables and columns
  • ❌ Headers/footers
  • ❌ Graphics and images
  • ❌ Non-standard fonts
  • ❌ Text boxes

Safe formatting:

  • ✅ Plain text or simple Markdown
  • ✅ Standard section headers (Experience, Education, Skills)
  • ✅ Bullet points with • or -
  • ✅ Dates in consistent format (MM/YYYY)
  • ✅ PDF generated from clean HTML/Markdown

Cover Letter Personalization

Generic cover letters are obvious. Personalize by:

  1. Address hiring manager by name (research on LinkedIn)
  2. Reference specific company initiatives (recent news, product launches)
  3. Connect your experience to their needs (not just "I'm great")
  4. Show genuine interest (why this company, not just any company)

Generated Output Structure

Tailored Resume (Markdown)

# [Your Name]
[Email] | [Phone] | [LinkedIn] | [Portfolio]

## Summary
[Customized 2-3 sentence summary highlighting relevant experience]

## Experience

### [Most Relevant Role]
**[Title]** | [Company] | [Dates]
- [Achievement with job posting keywords]
- [Quantified result relevant to target role]
- [Technical skills matching job requirements]

### [Second Most Relevant Role]
...

## Skills
[Prioritized skills matching job requirements]

## Education
[Degree] | [School] | [Year]

Cover Letter

[Your Name]
[Contact Info]
[Date]

[Hiring Manager Name]
[Company]

Dear [Name],

[Opening: Why this role excites you + company-specific detail]

[Body: 2-3 paragraphs connecting your experience to their needs]

[Closing: Call to action + appreciation]

Best regards,
[Your Name]

Python Tool Details

1. Job Analyzer

Purpose: Extract structured requirements from job posting text.

Usage:

python scripts/job_analyzer.py job-posting.txt --output analysis.json

Output:

{
  "title": "Senior Developer Advocate",
  "company": "MongoDB",
  "required_skills": ["Python", "Public Speaking", "MongoDB", "Vector Search"],
  "preferred_skills": ["RAG", "LangChain", "Customer Workshops"],
  "keywords": ["developer", "advocate", "workshops", "demos", "vector", "search"],
  "experience_years": "5+",
  "education": "Bachelor's degree or equivalent",
  "responsibilities": [
    "Lead customer workshops",
    "Build demo applications",
    "Present at conferences"
  ]
}

How it works:

  1. Parse job posting text
  2. Extract skills (regex patterns for common tech/tools)
  3. Identify required vs preferred (section headers, "must have" vs "nice to have")
  4. Extract experience requirements (regex for "X+ years")
  5. List responsibilities (bulleted sections)

2. Resume Matcher

Purpose: Match candidate experience to job requirements and score relevance.

Usage:

python scripts/resume_matcher.py master-resume.json analysis.json --output matches.json

Output:

{
  "overall_match": 0.82,
  "matched_skills": ["Python", "MongoDB", "Vector Search", "Public Speaking"],
  "missing_skills": ["LangChain"],
  "experience_matches": [
    {
      "title": "Principal Developer Advocate",
      "company": "MongoDB",
      "relevance_score": 0.95,
      "keyword_overlap": 0.87,
      "matched_achievements": [
        "Led 50+ customer workshops reaching 2,000+ developers",
        "Built RAG demo platform reducing integration time by 60%"
      ],
      "rewrite_suggestions": [
        "Add 'vector search' to RAG demo achievement",
        "Quantify workshop impact with developer metrics"
      ]
    }
  ],
  "tailoring_priority": [
    "Emphasize workshop leadership (matches 'Lead customer workshops')",
    "Highlight RAG/vector search projects",
    "Add specific MongoDB features you've demoed"
  ]
}

3. ATS Optimizer

Purpose: Generate ATS-friendly resume with keyword optimization.

Usage:

python scripts/ats_optimizer.py master-resume.json matches.json --output tailored-resume.md

Options:

  • --cover-letter - Generate cover letter too
  • --format pdf - Output PDF (requires pandoc)
  • --highlight-keywords - Bold keywords matching job posting

Output: Markdown resume with:

  • Keywords from job posting naturally integrated
  • Experience reordered by relevance score
  • Achievements rewritten to highlight job-specific value
  • Skills section prioritized by job requirements
  • ATS-safe formatting

Workflow Example

Scenario: Applying for "Senior Developer Advocate at MongoDB"

Step 1: Analyze job posting

python scripts/job_analyzer.py mongodb-job.txt --output analysis.json

Output: Extracts required skills (Python, MongoDB, workshops), keywords (developer advocate, RAG, vector search)

Step 2: Match your experience

python scripts/resume_matcher.py my-resume.json analysis.json --output matches.json

Output: Scores your MongoDB work at 0.95 relevance, identifies missing "LangChain" skill

Step 3: Generate tailored resume

python scripts/ats_optimizer.py my-resume.json matches.json \
  --output mongodb-resume.md \
  --cover-letter \
  --format pdf

Output:

  • mongodb-resume.md - Tailored resume highlighting MongoDB/workshop experience
  • mongodb-cover-letter.md - Personalized cover letter
  • mongodb-resume.pdf - ATS-optimized PDF

Step 4: Review and refine

  • Check keyword integration sounds natural
  • Verify quantified achievements are accurate
  • Customize cover letter opening (research hiring manager)
  • Proofread for typos

Step 5: Apply Upload mongodb-resume.pdf and submit cover letter text.

Common Patterns

Pattern 1: Keyword Integration Without Stuffing

Bad (keyword stuffing):

"Expert in Python, MongoDB, vector search, RAG, semantic search, embeddings, LangChain, OpenAI"

Good (natural integration):

"Built semantic search platform using MongoDB Atlas Vector Search with Python, integrating RAG patterns via LangChain and OpenAI embeddings"

Pattern 2: Quantify Everything

Before:

"Led customer workshops and improved developer satisfaction"

After:

"Led 50+ customer workshops reaching 2,000+ developers, achieving 4.8/5 satisfaction score and 40% increase in trial conversions"

Pattern 3: Action Verbs Matching Job Description

If job posting says "Drive adoption", use "Drove" (not "Led" or "Managed"). Mirror their language.

Pattern 4: Reorder Experience by Relevance

Master resume order: Chronological (newest first)

Tailored resume order: Relevance score (most relevant first), even if older

Example: Applying to DevRel role? Put your 2020 developer advocacy job before your 2023 engineering management role.

Quality Checklist

Before submitting:

  • Keywords from job posting appear naturally in resume
  • All achievements are quantified (numbers, percentages, scale)
  • Experience is reordered by relevance (not just chronological)
  • Cover letter addresses hiring manager by name
  • Cover letter references company-specific detail
  • Resume passes ATS check (no tables, graphics, weird fonts)
  • Dates are consistent format (MM/YYYY)
  • No typos or grammar errors
  • PDF is clean and parseable
  • File name is professional (FirstLast-Resume.pdf, not resume-final-v3.pdf)

When to Use vs. Generic Resume

Use tailored resumeUse generic resume
Applying to specific roleNetworking/informational interviews
Job posting with clear requirementsCareer fairs (exploratory)
Competitive positionInternal referrals (already have context)
ATS-screened applicationDirect email to hiring manager

Rule of thumb: If you're uploading to an ATS, tailor it.

Tools Integration

Export to LinkedIn: After tailoring, update your LinkedIn profile to mirror the keywords/achievements for that industry.

Track applications: Save each tailored resume as Company-Role-YYYY-MM-DD.pdf to track what you sent where.

A/B testing: If applying to similar roles, try different keyword emphasis and track response rates.

References

Credits

Michael Lynn — mlynn.org · @mlynn · LinkedIn · GitHub


Next steps after generating tailored resume:

  1. Proofread for natural language flow
  2. Customize cover letter opening with company research
  3. Save as PDF with professional filename
  4. Track application in spreadsheet
  5. Follow up 1 week after applying

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.