Use when creating tailored resumes for job applications - researches company/role, creates optimized templates, conducts branching experience discovery to surface undocumented skills, and generates professional multi-format resumes from user's resume library while maintaining factual integrity

44 stars
7 forks
1 views

SKILL.md


name: resume-tailoring description: Use when creating tailored resumes for job applications - researches company/role, creates optimized templates, conducts branching experience discovery to surface undocumented skills, and generates professional multi-format resumes from user's resume library while maintaining factual integrity

Resume Tailoring Skill

Overview

Generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. Builds resumes around the holistic person by surfacing undocumented experiences through conversational discovery.

Core Principle: Truth-preserving optimization - maximize fit while maintaining factual integrity. Never fabricate experience, but intelligently reframe and emphasize relevant aspects.

Mission: A person's ability to get a job should be based on their experiences and capabilities, not on their resume writing skills.

When to Use

Use this skill when:

  • User provides a job description and wants a tailored resume
  • User has multiple existing resumes in markdown format
  • User wants to optimize their application for a specific role/company
  • User needs help surfacing and articulating undocumented experiences

DO NOT use for:

  • Generic resume writing from scratch (user needs existing resume library)
  • Cover letters (different skill)
  • LinkedIn profile optimization (different skill)

Quick Start

Required from user:

  1. Job description (text or URL)
  2. Resume library location (defaults to resumes/ in current directory)

Workflow:

  1. Build library from existing resumes
  2. Research company/role
  3. Create template (with user checkpoint)
  4. Optional: Branching experience discovery
  5. Match content with confidence scoring
  6. Generate MD + DOCX + PDF + Report
  7. User review → Optional library update

Implementation

See supporting files:

  • research-prompts.md - Structured prompts for company/role research
  • matching-strategies.md - Content matching algorithms and scoring
  • branching-questions.md - Experience discovery conversation patterns

Workflow Details

Multi-Job Detection

Triggers when user provides:

  • Multiple JD URLs (comma or newline separated)
  • Phrases: "multiple jobs", "several positions", "batch", "3 jobs"
  • List of companies/roles: "Microsoft PM, Google TPM, AWS PM"

Detection Logic:

# Pseudo-code
def detect_multi_job(user_input):
    indicators = [
        len(extract_urls(user_input)) > 1,
        any(phrase in user_input.lower() for phrase in
            ["multiple jobs", "several positions", "batch of", "3 jobs", "5 jobs"]),
        count_company_mentions(user_input) > 1
    ]
    return any(indicators)

If detected:

"I see you have multiple job applications. Would you like to use
multi-job mode?

BENEFITS:
- Shared experience discovery (faster - ask questions once for all jobs)
- Batch processing with progress tracking
- Incremental additions (add more jobs later)

TIME COMPARISON (3 similar jobs):
- Sequential single-job: ~45 minutes (15 min × 3)
- Multi-job mode: ~40 minutes (15 min discovery + 8 min per job)

Use multi-job mode? (Y/N)"

If user confirms Y:

  • Use multi-job workflow (see multi-job-workflow.md)

If user confirms N or single job detected:

  • Use existing single-job workflow (Phase 0 onwards)

Backward Compatibility: Single-job workflow completely unchanged.

Multi-Job Workflow:

When multi-job mode is activated, see multi-job-workflow.md for complete workflow.

High-Level Multi-Job Process:

┌─────────────────────────────────────────────────────────────┐
│ PHASE 0: Intake & Batch Initialization                      │
│ - Collect 3-5 job descriptions                              │
│ - Initialize batch structure                                │
│ - Run library initialization (once)                         │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ PHASE 1: Aggregate Gap Analysis                            │
│ - Extract requirements from all JDs                         │
│ - Cross-reference against library                           │
│ - Build unified gap map (deduplicate)                       │
│ - Prioritize: Critical → Important → Job-specific          │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ PHASE 2: Shared Experience Discovery                       │
│ - Single branching interview covering ALL gaps              │
│ - Multi-job context for each question                       │
│ - Tag experiences with job relevance                        │
│ - Enrich library with discoveries                           │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ PHASE 3: Per-Job Processing (Sequential)                   │
│ For each job:                                               │
│   ├─ Research (company + role benchmarking)                 │
│   ├─ Template generation                                    │
│   ├─ Content matching (uses enriched library)              │
│   └─ Generation (MD + DOCX + Report)                        │
│ Interactive or Express mode                                 │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ PHASE 4: Batch Finalization                                │
│ - Generate batch summary                                    │
│ - User reviews all resumes together                         │
│ - Approve/revise individual or batch                        │
│ - Update library with approved resumes                      │
└─────────────────────────────────────────────────────────────┘

Time Savings:

  • 3 jobs: ~40 min (vs 45 min sequential) = 11% savings
  • 5 jobs: ~55 min (vs 75 min sequential) = 27% savings

Quality: Same depth as single-job workflow (research, matching, generation)

See multi-job-workflow.md for complete implementation details.

Phase 0: Library Initialization

Always runs first - builds fresh resume database

Process:

  1. Locate resume directory:

    User provides path OR default to ./resumes/
    Validate directory exists
    
  2. Scan for markdown files:

    Use Glob tool: pattern="*.md" path={resume_directory}
    Count files found
    Announce: "Building resume library... found {N} resumes"
    
  3. Parse each resume: For each resume file:

    • Use Read tool to load content
    • Extract sections: roles, bullets, skills, education
    • Identify patterns: bullet structure, length, formatting
  4. Build experience database structure:

    {
      "roles": [
        {
          "role_id": "company_title_year",
          "company": "Company Name",
          "title": "Job Title",
          "dates": "YYYY-YYYY",
          "description": "Role summary",
          "bullets": [
            {
              "text": "Full bullet text",
              "themes": ["leadership", "technical"],
              "metrics": ["17x improvement", "$3M revenue"],
              "keywords": ["cross-functional", "program"],
              "source_resumes": ["resume1.md"]
            }
          ]
        }
      ],
      "skills": {
        "technical": ["Python", "Kusto", "AI/ML"],
        "product": ["Roadmap", "Strategy"],
        "leadership": ["Stakeholder mgmt"]
      },
      "education": [...],
      "user_preferences": {
        "typical_length": "1-page|2-page",
        "section_order": ["summary", "experience", "education"],
        "bullet_style": "pattern"
      }
    }
    
  5. Tag content automatically:

    • Themes: Scan for keywords (leadership, technical, analytics, etc.)
    • Metrics: Extract numbers, percentages, dollar amounts
    • Keywords: Frequent technical terms, action verbs

Output: In-memory database ready for matching

Code pattern:

# Pseudo-code for reference
library = {
    "roles": [],
    "skills": {},
    "education": []
}

for resume_file in glob("resumes/*.md"):
    content = read(resume_file)
    roles = extract_roles(content)
    for role in roles:
        role["bullets"] = tag_bullets(role["bullets"])
        library["roles"].append(role)

return library

Phase 1: Research Phase

Goal: Build comprehensive "success profile" beyond just the job description

Inputs:

  • Job description (text or URL from user)
  • Optional: Company name if not in JD

Process:

1.1 Job Description Parsing:

Use research-prompts.md JD parsing template
Extract: requirements, keywords, implicit preferences, red flags, role archetype

1.2 Company Research:

WebSearch queries:
- "{company} mission values culture"
- "{company} engineering blog"
- "{company} recent news"

Synthesize: mission, values, business model, stage

1.3 Role Benchmarking:

WebSearch: "site:linkedin.com {job_title} {company}"
WebFetch: Top 3-5 profiles
Analyze: common backgrounds, skills, terminology

If sparse results, try similar companies

1.4 Success Profile Synthesis:

Combine all research into structured profile (see research-prompts.md template)

Include:
- Core requirements (must-have)
- Valued capabilities (nice-to-have)
- Cultural fit signals
- Narrative themes
- Terminology map (user's background → their language)
- Risk factors + mitigations

Checkpoint:

Present success profile to user:

"Based on my research, here's what makes candidates successful for this role:

{SUCCESS_PROFILE_SUMMARY}

Key findings:
- {Finding 1}
- {Finding 2}
- {Finding 3}

Does this match your understanding? Any adjustments?"

Wait for user confirmation before proceeding.

Output: Validated success profile document

Phase 2: Template Generation

Goal: Create resume structure optimized for this specific role

Inputs:

  • Success profile (from Phase 1)
  • User's resume library (from Phase 0)

Process:

2.1 Analyze User's Resume Library:

Extract from library:
- All roles, titles, companies, date ranges
- Role archetypes (technical contributor, manager, researcher, specialist)
- Experience clusters (what domains/skills appear frequently)
- Career progression and narrative

2.2 Role Consolidation Decision:

When to consolidate:

  • Same company, similar responsibilities
  • Target role values continuity over granular progression
  • Combined narrative stronger than separate
  • Page space constrained

When to keep separate:

  • Different companies (ALWAYS separate)
  • Dramatically different responsibilities that both matter
  • Target role values specific progression story
  • One position has significantly more relevant experience

Decision template:

For {Company} with {N} positions:

OPTION A (Consolidated):
Title: "{Combined_Title}"
Dates: "{First_Start} - {Last_End}"
Rationale: {Why consolidation makes sense}

OPTION B (Separate):
Position 1: "{Title}" ({Dates})
Position 2: "{Title}" ({Dates})
Rationale: {Why separate makes sense}

RECOMMENDED: Option {A/B} because {reasoning}

2.3 Title Reframing Principles:

Core rule: Stay truthful to what you did, emphasize aspect most relevant to target

Strategies:

  1. Emphasize different aspects:

    • "Graduate Researcher" → "Research Software Engineer" (if coding-heavy)
    • "Data Science Lead" → "Technical Program Manager" (if leadership)
  2. Use industry-standard terminology:

    • "Scientist III" → "Senior Research Scientist" (clearer seniority)
    • "Program Coordinator" → "Project Manager" (standard term)
  3. Add specialization when truthful:

    • "Engineer" → "ML Engineer" (if ML work substantial)
    • "Researcher" → "Computational Ecologist" (if computational methods)
  4. Adjust seniority indicators:

    • "Lead" vs "Senior" vs "Staff" based on scope

Constraints:

  • NEVER claim work you didn't do
  • NEVER inflate seniority beyond defensible
  • Company name and dates MUST be exact
  • Core responsibilities MUST be accurate

2.4 Generate Template Structure:

## Professional Summary
[GUIDANCE: {X} sentences emphasizing {themes from success profile}]
[REQUIRED ELEMENTS: {keywords from JD}]

## Key Skills
[STRUCTURE: {2-4 categories based on JD structure}]
[SOURCE: Extract from library matching success profile]

## Professional Experience

### [ROLE 1 - Most Recent/Relevant]
[CONSOLIDATION: {merge X positions OR keep separate}]
[TITLE OPTIONS:
  A: {emphasize aspect 1}
  B: {emphasize aspect 2}
  Recommended: {option with rationale}]
[BULLET ALLOCATION: {N bullets based on relevance + recency}]
[GUIDANCE: Emphasize {themes}, look for {experience types}]

Bullet 1: [SEEKING: {requirement type}]
Bullet 2: [SEEKING: {requirement type}]
...

### [ROLE 2]
...

## Education
[PLACEMENT: {top if required/recent, bottom if experience-heavy}]

## [Optional Sections]
[INCLUDE IF: {criteria from success profile}]

Checkpoint:

Present template to user:

"Here's the optimized resume structure for this role:

STRUCTURE:
{Section order and rationale}

ROLE CONSOLIDATION:
{Decisions with options}

TITLE REFRAMING:
{Proposed titles with alternatives}

BULLET ALLOCATION:
Role 1: {N} bullets (most relevant)
Role 2: {N} bullets
...

Does this structure work? Any adjustments to:
- Role consolidation?
- Title reframing?
- Bullet allocation?"

Wait for user approval before proceeding.

Output: Approved template skeleton with guidance for each section

Phase 2.5: Experience Discovery (OPTIONAL)

Goal: Surface undocumented experiences through conversational discovery

When to trigger:

After template approval, if gaps identified:

"I've identified {N} gaps or areas where we have weak matches:
- {Gap 1}: {Current confidence}
- {Gap 2}: {Current confidence}
...

Would you like to do a structured brainstorming session to surface
any experiences you haven't documented yet?

This typically takes 10-15 minutes and often uncovers valuable content."

User can accept or skip.

Branching Interview Process:

Approach: Conversational with follow-up questions based on answers

For each gap, conduct branching dialogue (see branching-questions.md):

  1. Start with open probe:

    • Technical gap: "Have you worked with {skill}?"
    • Soft skill gap: "Tell me about times you've {demonstrated_skill}"
    • Recent work: "What have you worked on recently?"
  2. Branch based on answer:

    • YES/Strong → Deep dive (scale, challenges, metrics)
    • INDIRECT → Explore role and transferability
    • ADJACENT → Explore related experience
    • PERSONAL → Assess recency and substance
    • NO → Try broader category or move on
  3. Follow-up systematically:

    • Ask "what," "how," "why" to get details
    • Quantify: "Any metrics?"
    • Contextualize: "Was this production?"
    • Validate: "Does this address the gap?"
  4. Capture immediately:

    • Document experience as shared
    • Ask clarifying questions (dates, scope, impact)
    • Help articulate as resume bullet
    • Tag which gap(s) it addresses

Capture Structure:

## Newly Discovered Experiences

### Experience 1: {Brief description}
- Context: {Where/when}
- Scope: {Scale, duration, impact}
- Addresses: {Which gaps}
- Bullet draft: "{Achievement-focused bullet}"
- Confidence: {How well fills gap - percentage}

### Experience 2: ...

Integration Options:

After discovery session:

"Great! I captured {N} new experiences. For each one:

1. ADD TO CURRENT RESUME - Integrate now
2. ADD TO LIBRARY ONLY - Save for future, not needed here
3. REFINE FURTHER - Think more about articulation
4. DISCARD - Not relevant enough

Let me know for each experience."

Important Notes:

  • Keep truthfulness bar high - help articulate, NEVER fabricate
  • Focus on gaps and weak matches, not strong areas
  • Time-box if needed (10-15 minutes typical)
  • User can skip entirely if confident in library
  • Recognize when to move on - don't exhaust user

Output: New experiences integrated into library, ready for matching

Phase 3: Assembly Phase

Goal: Fill approved template with best-matching content, with transparent scoring

Inputs:

  • Approved template (from Phase 2)
  • Resume library + discovered experiences (from Phase 0 + 2.5)
  • Success profile (from Phase 1)

Process:

3.1 For Each Template Slot:

  1. Extract all candidate bullets from library

    • All bullets from library database
    • All newly discovered experiences
    • Include source resume for each
  2. Score each candidate (see matching-strategies.md)

    • Direct match (40%): Keywords, domain, technology, outcome
    • Transferable (30%): Same capability, different context
    • Adjacent (20%): Related tools, methods, problem space
    • Impact (10%): Achievement type alignment

    Overall = (Direct × 0.4) + (Transfer × 0.3) + (Adjacent × 0.2) + (Impact × 0.1)

  3. Rank candidates by score

    • Sort high to low
    • Group by confidence band:
      • 90-100%: DIRECT
      • 75-89%: TRANSFERABLE
      • 60-74%: ADJACENT
      • <60%: WEAK/GAP
  4. Present top 3 matches with analysis:

    TEMPLATE SLOT: {Role} - Bullet {N}
    SEEKING: {Requirement description}
    
    MATCHES:
    [DIRECT - 95%] "{bullet_text}"
      ✓ Direct: {what matches directly}
      ✓ Transferable: {what transfers}
      ✓ Metrics: {quantified impact}
      Source: {resume_name}
    
    [TRANSFERABLE - 78%] "{bullet_text}"
      ✓ Transferable: {what transfers}
      ✓ Adjacent: {what's adjacent}
      ⚠ Gap: {what's missing}
      Source: {resume_name}
    
    [ADJACENT - 62%] "{bullet_text}"
      ✓ Adjacent: {what's related}
      ⚠ Gap: {what's missing}
      Source: {resume_name}
    
    RECOMMENDATION: Use DIRECT match (95%)
    ALTERNATIVE: If avoiding repetition, use TRANSFERABLE (78%) with reframing
    
  5. Handle gaps (confidence <60%):

    GAP IDENTIFIED: {Requirement}
    
    BEST AVAILABLE: {score}% - "{bullet_text}"
    
    REFRAME OPPORTUNITY: {If applicable}
    Original: "{text}"
    Reframed: "{adjusted_text}" (truthful because {reason})
    New confidence: {score}%
    
    OPTIONS:
    1. Use reframed version ({new_score}%)
    2. Acknowledge gap in cover letter
    3. Omit bullet slot (reduce allocation)
    4. Use best available with disclosure
    
    RECOMMENDATION: {Most appropriate option}
    

3.2 Content Reframing:

When good match (>60%) but terminology misaligned:

Apply strategies from matching-strategies.md:

  • Keyword alignment (preserve meaning, adjust terms)
  • Emphasis shift (same facts, different focus)
  • Abstraction level (adjust technical specificity)
  • Scale emphasis (highlight relevant aspects)

Show before/after for transparency:

REFRAMING APPLIED:
Bullet: {template_slot}

Original: "{original_bullet}"
Source: {resume_name}

Reframed: "{reframed_bullet}"
Changes: {what changed and why}
Truthfulness: {why this is accurate}

Checkpoint:

"I've matched content to your template. Here's the complete mapping:

COVERAGE SUMMARY:
- Direct matches: {N} bullets ({percentage}%)
- Transferable: {N} bullets ({percentage}%)
- Adjacent: {N} bullets ({percentage}%)
- Gaps: {N} ({percentage}%)

REFRAMINGS APPLIED: {N}
- {Example 1}
- {Example 2}

GAPS IDENTIFIED:
- {Gap 1}: {Recommendation}
- {Gap 2}: {Recommendation}

OVERALL JD COVERAGE: {percentage}%

Review the detailed mapping below. Any adjustments to:
- Match selections?
- Reframings?
- Gap handling?"

[Present full detailed mapping]

Wait for user approval before generation.

Output: Complete bullet-by-bullet mapping with confidence scores and reframings

Phase 4: Generation Phase

Goal: Create professional multi-format outputs

Inputs:

  • Approved content mapping (from Phase 3)
  • User's formatting preferences (from library analysis)
  • Target role information (from Phase 1)

Process:

4.1 Markdown Generation:

Compile mapped content into clean markdown:

# {User_Name}

{Contact_Info}

---

## Professional Summary

{Summary_from_template}

---

## Key Skills

**{Category_1}:**
- {Skills_from_library_matching_profile}

**{Category_2}:**
- {Skills_from_library_matching_profile}

{Repeat for all categories}

---

## Professional Experience

### {Job_Title}
**{Company} | {Location} | {Dates}**

{Role_summary_if_applicable}

• {Bullet_1_from_mapping}
• {Bullet_2_from_mapping}
...

### {Next_Role}
...

---

## Education

**{Degree}** | {Institution} ({Year})
**{Degree}** | {Institution} ({Year})

Use user's preferences:

  • Formatting style from library analysis
  • Bullet structure pattern
  • Section ordering
  • Typical length (1-page vs 2-page)

Output: {Name}_{Company}_{Role}_Resume.md

4.2 DOCX Generation:

Use document-skills:docx:

REQUIRED SUB-SKILL: Use document-skills:docx

Create Word document with:
- Professional fonts (Calibri 11pt body, 12pt headers)
- Proper spacing (single within sections, space between)
- Clean bullet formatting (proper numbering config, NOT unicode)
- Header with contact information
- Appropriate margins (0.5-1 inch)
- Bold/italic emphasis (company names, titles, dates)
- Page breaks if 2-page resume

See docx skill documentation for:
- Paragraph and TextRun structure
- Numbering configuration for bullets
- Heading levels and styles
- Spacing and margins

Output: {Name}_{Company}_{Role}_Resume.docx

4.3 PDF Generation (Optional):

If user requests PDF:

OPTIONAL SUB-SKILL: Use document-skills:pdf

Convert DOCX to PDF OR generate directly
Ensure formatting preservation
Professional appearance for direct submission

Output: {Name}_{Company}_{Role}_Resume.pdf

4.4 Generation Summary Report:

Create metadata file:

# Resume Generation Report
**{Role} at {Company}**

**Date Generated:** {timestamp}

## Target Role Summary
- Company: {Company}
- Position: {Role}
- IC Level: {If known}
- Focus Areas: {Key areas}

## Success Profile Summary
- Key Requirements: {top 5}
- Cultural Fit Signals: {themes}
- Risk Factors Addressed: {mitigations}

## Content Mapping Summary
- Total bullets: {N}
- Direct matches: {N} ({percentage}%)
- Transferable: {N} ({percentage}%)
- Adjacent: {N} ({percentage}%)
- Gaps identified: {list}

## Reframing Applied
- {bullet}: {original} → {reframed} [Reason: {why}]
...

## Source Resumes Used
- {resume1}: {N} bullets
- {resume2}: {N} bullets
...

## Gaps Addressed

### Before Experience Discovery:
{Gap analysis showing initial state}

### After Experience Discovery:
{Gap analysis showing final state}

### Remaining Gaps:
{Any unresolved gaps with recommendations}

## Key Differentiators for This Role
{What makes user uniquely qualified}

## Recommendations for Interview Prep
- Stories to prepare
- Questions to expect
- Gaps to address

Output: {Name}_{Company}_{Role}_Resume_Report.md

Present to user:

"Your tailored resume has been generated!

FILES CREATED:
- {Name}_{Company}_{Role}_Resume.md
- {Name}_{Company}_{Role}_Resume.docx
- {Name}_{Company}_{Role}_Resume_Report.md
{- {Name}_{Company}_{Role}_Resume.pdf (if requested)}

QUALITY METRICS:
- JD Coverage: {percentage}%
- Direct Matches: {percentage}%
- Newly Discovered: {N} experiences

Review the files and let me know:
1. Save to library (recommended)
2. Need revisions
3. Save but don't add to library"

Phase 5: Library Update (CONDITIONAL)

Goal: Optionally add successful resume to library for future use

When: After user reviews and approves generated resume

Checkpoint Question:

"Are you satisfied with this resume?

OPTIONS:
1. YES - Save to library
   → Adds resume to permanent location
   → Rebuilds library database
   → Makes new content available for future resumes

2. NO - Need revisions
   → What would you like to adjust?
   → Make changes and re-present

3. SAVE BUT DON'T ADD TO LIBRARY
   → Keep files in current location
   → Don't enrich database
   → Useful for experimental resumes

Which option?"

If Option 1 (YES - Save to library):

Process:

  1. Move resume to library:

    Source: {current_directory}/{Name}_{Company}_{Role}_Resume.md
    Destination: {resume_library}/{Name}_{Company}_{Role}_Resume.md
    
    Also move:
    - .docx file
    - .pdf file (if exists)
    - _Report.md file
    
  2. Rebuild library database:

    Re-run Phase 0 library initialization
    Parse newly created resume
    Add bullets to experience database
    Update keyword/theme indices
    Tag with metadata:
      - target_company: {Company}
      - target_role: {Role}
      - generated_date: {timestamp}
      - jd_coverage: {percentage}
      - success_profile: {reference to profile}
    
  3. Preserve generation metadata:

    {
      "resume_id": "{Name}_{Company}_{Role}",
      "generated": "{timestamp}",
      "source_resumes": ["{resume1}", "{resume2}"],
      "reframings": [
        {
          "original": "{text}",
          "reframed": "{text}",
          "reason": "{why}"
        }
      ],
      "match_scores": {
        "bullet_1": 95,
        "bullet_2": 87,
        ...
      },
      "newly_discovered": [
        {
          "experience": "{description}",
          "bullet": "{text}",
          "addresses_gap": "{gap}"
        }
      ]
    }
    
  4. Announce completion:

    "Resume saved to library!
    
    Library updated:
    - Total resumes: {N}
    - New content variations: {N}
    - Newly discovered experiences added: {N}
    
    This resume and its new content are now available for future tailoring sessions."
    

If Option 2 (NO - Need revisions):

"What would you like to adjust?"

[Collect user feedback]
[Make requested changes]
[Re-run relevant phases]
[Re-present for approval]

[Repeat until satisfied or user cancels]

If Option 3 (SAVE BUT DON'T ADD TO LIBRARY):

"Resume files saved to current directory:
- {Name}_{Company}_{Role}_Resume.md
- {Name}_{Company}_{Role}_Resume.docx
- {Name}_{Company}_{Role}_Resume_Report.md

Not added to library - you can manually move later if desired."

Benefits of Library Update:

  • Grows library with each successful resume
  • New bullet variations become available
  • Reframings that work can be reused
  • Discovered experiences permanently captured
  • Future sessions start with richer library
  • Self-improving system over time

Output: Updated library database + metadata preservation (if Option 1)

Error Handling & Edge Cases

Edge Case 1: Insufficient Resume Library

SCENARIO: User has only 1-2 resumes, limited content

HANDLING:
"⚠️ Limited resume library detected ({N} resumes).

This may result in:
- Fewer matching options
- More gaps in coverage
- Less variety in bullet phrasing

RECOMMENDATIONS:
- Proceed with available content (I'll do my best!)
- Consider adding more resumes after this generation
- Experience Discovery phase will be especially valuable

Continue? (Y/N)"

Edge Case 2: No Good Matches (confidence <60% for critical requirement)

SCENARIO: Template slot requires experience user doesn't have

HANDLING:
"❌ GAP: {Requirement}

No matches found with confidence >60%

OPTIONS:
1. Run Experience Discovery - might surface undocumented work
2. Reframe best available ({score}%) - I'll show you the reframing
3. Omit bullet slot - reduce template allocation
4. Note for cover letter - emphasize learning ability

Which approach?"

[Don't force matches - be transparent about gaps]

Edge Case 3: Research Phase Failures

SCENARIO: WebSearch fails, LinkedIn unavailable, company info sparse

HANDLING:
"⚠️ Limited company research available.

What I found:
- {Available info}

What's missing:
- {Missing areas}

Falling back to job description-only analysis.
Result: Template will be optimized for JD but may miss cultural nuances.

Do you have additional context about:
- Company culture?
- Team structure?
- Technologies used?

(Optional - you can share or skip)"

[Proceed with best-effort approach]

Edge Case 4: Job Description Quality Issues

SCENARIO: Vague JD, missing requirements, poorly written

HANDLING:
"⚠️ Job description lacks detail in areas:
- {Missing area 1}
- {Missing area 2}

This may limit template optimization.

Do you have additional context about:
- {Question 1}
- {Question 2}

(Optional - I'll work with what's available)"

[Extract what's possible, proceed]

Edge Case 5: Ambiguous Role Consolidation

SCENARIO: Unclear whether to merge roles or keep separate

HANDLING:
"🤔 Ambiguous consolidation decision for {Company}

OPTION A (Consolidated): {Rationale}
OPTION B (Separate): {Rationale}

Both are defensible. Which do you prefer?

(This becomes your preference for similar situations)"

[Remember preference for future]

Edge Case 6: Resume Length Constraints

SCENARIO: Too much good content, exceeds 2 pages

HANDLING:
"⚠️ Content exceeds 2 pages (current: {N} bullets, ~{pages} pages)

PRUNING SUGGESTIONS (ranked by relevance):
Remove:
- {Bullet X}: {score}% match (lowest)
- {Bullet Y}: {score}% match
...

Keep all bullets and accept >2 pages?
OR
Remove {N} bullets to fit 2 pages?

Your preference?"

[User decides priority]

Error Recovery:

  • All checkpoints allow going back to previous phase
  • User can request adjustments at any checkpoint
  • Generation failures (DOCX/PDF) fall back to markdown-only
  • Progress saved between phases (can resume if interrupted)

Graceful Degradation:

  • Research limited → Fall back to JD-only analysis
  • Library small → Work with available + emphasize discovery
  • Matches weak → Transparent gap identification
  • Generation fails → Provide markdown + error details

Usage Examples

Example 1: Internal Role (Same Company)

USER: "I want to apply for Principal PM role in 1ES team at Microsoft.
      Here's the JD: {paste}"

SKILL:
1. Library Build: Finds 29 resumes
2. Research: Microsoft 1ES team, internal culture, role benchmarking
3. Template: Features PM2 Azure Eng Systems role (most relevant)
4. Discovery: Surfaces VS Code extension, Bhavana AI side project
5. Assembly: 92% JD coverage, 75% direct matches
6. Generate: MD + DOCX + Report
7. User approves → Library updated with new resume + 6 discovered experiences

RESULT: Highly competitive application leveraging internal experience

Example 2: Career Transition (Different Domain)

USER: "I'm a TPM trying to transition to ecology PM role. JD: {paste}"

SKILL:
1. Library Build: Finds existing TPM resumes
2. Research: Ecology sector, sustainability focus, cross-domain transfers
3. Template: Reframes "Technical Program Manager" → "Program Manager,
             Environmental Systems" emphasizing systems thinking
4. Discovery: Surfaces volunteer conservation work, graduate research in
             environmental modeling
5. Assembly: 65% JD coverage - flags gaps in domain-specific knowledge
6. Generate: Resume + gap analysis with cover letter recommendations

RESULT: Bridges technical skills with environmental domain

Example 3: Career Gap Handling

USER: "I have a 2-year gap while starting a company. JD: {paste}"

SKILL:
1. Library Build: Finds pre-gap resumes
2. Research: Standard analysis
3. Template: Includes startup as legitimate role
4. Discovery: Surfaces skills developed during startup (fundraising,
             product development, team building)
5. Assembly: Frames gap as entrepreneurial experience
6. Generate: Resume presenting gap as valuable experience

RESULT: Gap becomes strength showing initiative and diverse skills

Example 4: Multi-Job Batch (3 Similar Roles)

USER: "I want to apply for these 3 TPM roles:
      1. Microsoft 1ES Principal PM
      2. Google Cloud Senior TPM
      3. AWS Container Services Senior PM
      Here are the JDs: {paste 3 JDs}"

SKILL:
1. Multi-job detection: Triggered (3 JDs detected)
2. Intake: Collects all 3 JDs, initializes batch
3. Library Build: Finds 29 resumes (once)
4. Gap Analysis: Identifies 14 gaps, 8 unique after deduplication
5. Shared Discovery: 30-minute session surfaces 5 new experiences
   - Kubernetes CI/CD for nonprofits
   - Azure migration for university lab
   - Cross-functional team leadership examples
   - Recent hackathon project
   - Open source contributions
6. Per-Job Processing (×3):
   - Job 1 (Microsoft): 85% coverage, emphasizes Azure/1ES alignment
   - Job 2 (Google): 88% coverage, emphasizes technical depth
   - Job 3 (AWS): 78% coverage, addresses AWS gap in cover letter recs
7. Batch Finalization: All 3 resumes reviewed, approved, added to library

RESULT: 3 high-quality resumes in 40 minutes vs 45 minutes sequential
        5 new experiences captured, available for future applications
        Average coverage: 84%, all critical gaps resolved

Example 5: Incremental Batch Addition

WEEK 1:
USER: "I want to apply for 3 jobs: {Microsoft, Google, AWS}"
SKILL: [Processes batch as above, completes in 40 min]

WEEK 2:
USER: "I found 2 more jobs: Stripe and Meta. Add them to my batch?"
SKILL:
1. Load existing batch (includes 5 previously discovered experiences)
2. Intake: Adds Job 4 (Stripe), Job 5 (Meta)
3. Incremental Gap Analysis: Only 3 new gaps (vs 14 original)
   - Payment systems (Stripe-specific)
   - Social networking (Meta-specific)
   - React/frontend (both)
4. Incremental Discovery: 10-minute session for new gaps only
   - Surfaces payment processing side project
   - React work from bootcamp
   - Large-scale system design course
5. Per-Job Processing (×2): Jobs 4, 5 processed independently
6. Updated Batch Summary: Now 5 jobs total, 8 experiences discovered

RESULT: 2 additional resumes in 20 minutes (vs 30 min if starting from scratch)
        Time saved by not re-asking 8 previous gaps: ~20 minutes

Testing Guidelines

Manual Testing Checklist:

Test 1: Happy Path

- Provide JD with clear requirements
- Library with 10+ resumes
- Run all phases without skipping
- Verify generated files
- Check library update
PASS CRITERIA:
- All files generated correctly
- JD coverage >70%
- No errors in any phase

Test 2: Minimal Library

- Provide only 2 resumes
- Run through workflow
- Verify gap handling
PASS CRITERIA:
- Graceful warning about limited library
- Still produces reasonable output
- Gaps clearly identified

Test 3: Research Failures

- Use obscure company with minimal online presence
- Verify fallback to JD-only
PASS CRITERIA:
- Warning about limited research
- Proceeds with JD analysis
- Template still reasonable

Test 4: Experience Discovery Value

- Run with deliberate gaps in library
- Conduct experience discovery
- Verify new experiences integrated
PASS CRITERIA:
- Discovers genuine undocumented experiences
- Integrates into final resume
- Improves JD coverage

Test 5: Title Reframing

- Test various role transitions
- Verify title reframing suggestions
PASS CRITERIA:
- Multiple options provided
- Truthfulness maintained
- Rationales clear

Test 6: Multi-format Generation

- Generate MD, DOCX, PDF, Report
- Verify formatting consistency
PASS CRITERIA:
- All formats readable
- Formatting professional
- Content identical across formats

Regression Testing:

After any SKILL.md changes:
1. Re-run Test 1 (happy path)
2. Verify no functionality broken
3. Commit only if passes

README

Resume Tailoring Skill

AI-powered resume generation that researches roles, surfaces undocumented experiences, and creates tailored resumes from your existing resume library.

Mission: Your ability to get a job should be based on your experiences and capabilities, not on your resume writing skills.

License: MIT

Table of Contents

Overview

This Claude Code skill generates high-quality, tailored resumes optimized for specific job descriptions while maintaining factual integrity. It goes beyond simple keyword matching by:

  • Multi-Job Batch Processing: Process 3-5 similar jobs efficiently with shared experience discovery (NEW!)
  • Deep Research: Analyzes company culture, role requirements, and success profiles
  • Experience Discovery: Surfaces undocumented experiences through conversational branching interviews
  • Smart Matching: Uses confidence-scored content selection with transparent gap identification
  • Multi-Format Output: Generates professional MD, DOCX, PDF, and interview prep reports
  • Self-Improving: Library grows with each successful resume

Installation

Option 1: Install from GitHub (Recommended)

  1. Clone the repository:

    git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring
    
  2. Verify installation:

    ls ~/.claude/skills/resume-tailoring
    

    You should see: SKILL.md, research-prompts.md, matching-strategies.md, branching-questions.md, README.md

  3. Restart Claude Code (if already running)

Option 2: Manual Installation

  1. Create the skill directory:

    mkdir -p ~/.claude/skills/resume-tailoring
    
  2. Download the files:

    • Download all files from this repository
    • Place them in ~/.claude/skills/resume-tailoring/
  3. Verify installation:

    • Open Claude Code
    • Type /skills to see available skills
    • resume-tailoring should appear in the list

Prerequisites

Required:

  • Claude Code with skills enabled
  • Existing resume library (at least 1-2 resumes in markdown format)

Optional but Recommended:

  • WebSearch capability (for company research)
  • document-skills plugin (for DOCX/PDF generation)
  • 10+ resumes in your library for best results

Resume Library Setup:

Create a resumes/ directory in your project:

mkdir -p ~/resumes

Add your existing resumes in markdown format:

~/resumes/
├── Resume_Company1_Role1.md
├── Resume_Company2_Role2.md
└── Resume_General_2024.md

Quick Start

Single Job Application

1. Invoke the skill in Claude Code:

"I want to apply for [Role] at [Company]. Here's the JD: [paste job description]"

2. The skill will automatically:

  1. Build library from existing resumes
  2. Research company and role
  3. Create optimized template (with checkpoint)
  4. Offer branching experience discovery
  5. Match content with confidence scores (with checkpoint)
  6. Generate MD + DOCX + PDF + Report
  7. Optionally update library

3. Review and approve:

  • Checkpoints at key decision points
  • Full transparency on content matching
  • Option to revise or approve at each stage

Multiple Jobs (Batch Mode - NEW!)

1. Provide multiple job descriptions:

"I want to apply for these 3 roles:
1. [Company 1] - [Role]: [JD or URL]
2. [Company 2] - [Role]: [JD or URL]
3. [Company 3] - [Role]: [JD or URL]"

2. The skill will:

  1. Detect multi-job intent and offer batch mode
  2. Build library once (shared across all jobs)
  3. Analyze gaps across ALL jobs (deduplicates common requirements)
  4. Conduct single discovery session addressing all gaps
  5. Process each job individually (research + tailoring)
  6. Present all resumes for batch review

3. Time savings:

  • Shared discovery session (ask once, not 3-5 times)
  • 11-27% faster than processing jobs sequentially
  • Same quality as single-job mode

Files

Core Implementation

  • SKILL.md - Main skill implementation with single-job and multi-job workflows
  • multi-job-workflow.md - Complete multi-job batch processing workflow
  • research-prompts.md - Company/role research templates
  • matching-strategies.md - Content scoring algorithms
  • branching-questions.md - Experience discovery patterns

Documentation

  • README.md - This file
  • MARKETPLACE.md - Marketplace listing information
  • SUBMISSION_GUIDE.md - Skill submission guidelines

Supporting Documentation (docs/)

  • docs/schemas/ - Data structure schemas for batch processing
    • batch-state-schema.md - Batch state tracking structure
    • job-schema.md - Job object schema
  • docs/plans/ - Design documents and implementation plans
    • 2025-11-04-multi-job-resume-tailoring-design.md - Multi-job feature design
    • 2025-11-04-multi-job-implementation-summary.md - Implementation summary
  • docs/testing/ - Testing checklists
    • multi-job-test-checklist.md - Comprehensive multi-job test cases

Key Features

🚀 Multi-Job Batch Processing (NEW!)

  • Process 3-5 similar jobs efficiently
  • Shared experience discovery (ask once, apply to all)
  • Aggregate gap analysis with deduplication
  • Time savings: 11-27% faster than sequential processing
  • Incremental batches (add more jobs later)

🔍 Deep Research

  • Company culture and values
  • Role benchmarking via LinkedIn
  • Success profile synthesis

💬 Branching Discovery

  • Conversational experience surfacing
  • Dynamic follow-up questions
  • Surfaces undocumented work
  • Multi-job context awareness

🎯 Smart Matching

  • Confidence-scored content selection
  • Transparent gap identification
  • Truth-preserving reframing

📄 Multi-Format Output

  • Professional markdown
  • ATS-friendly DOCX
  • Print-ready PDF
  • Interview prep report

🔄 Self-Improving

  • Library grows with each resume
  • Successful patterns reused
  • New experiences captured

Architecture

Single-Job Workflow

Phase 0: Library Build (always first)
   ↓
Phase 1: Research (JD + Company + Role)
   ↓
Phase 2: Template (Structure + Titles)
   ↓  [CHECKPOINT]
Phase 2.5: Experience Discovery (Optional, Branching)
   ↓
Phase 3: Assembly (Matching + Scoring)
   ↓  [CHECKPOINT]
Phase 4: Generation (MD + DOCX + PDF + Report)
   ↓  [USER REVIEW]
Phase 5: Library Update (Conditional)

Multi-Job Workflow (NEW!)

Phase 0: Intake & Batch Initialization
   ↓
Phase 1: Aggregate Gap Analysis (deduplicates across all jobs)
   ↓
Phase 2: Shared Experience Discovery (ask once, apply to all)
   ↓
Phase 3: Per-Job Processing (research + template + matching + generation for each)
   ↓
Phase 4: Batch Finalization (review all resumes, update library)

Time Savings:

  • 3 jobs: ~40 min vs ~45 min sequential (11% savings)
  • 5 jobs: ~55 min vs ~75 min sequential (27% savings)

See multi-job-workflow.md for complete details.

Design Philosophy

Truth-Preserving Optimization:

  • NEVER fabricate experience
  • Intelligently reframe and emphasize
  • Transparent about gaps

Holistic Person Focus:

  • Surface undocumented experiences
  • Value volunteer work, side projects
  • Build around complete background

User Control:

  • Checkpoints at key decisions
  • Options, not mandates
  • Can adjust or go back

Usage Examples

Example 1: Internal Role Transfer

USER: "I want to apply for Principal PM role in 1ES team at Microsoft.
      Here's the JD: [paste]"

RESULT:
- Found 29 existing resumes
- Researched Microsoft 1ES team culture
- Featured PM2 Azure Eng Systems experience
- Discovered: VS Code extension, AI side projects
- 92% JD coverage, 75% direct matches
- Generated tailored resume + interview prep report

Example 2: Career Transition

USER: "I'm a TPM transitioning to ecology PM. JD: [paste]"

RESULT:
- Reframed "Technical Program Manager" → "Program Manager, Environmental Systems"
- Surfaced volunteer conservation work
- Identified graduate research in environmental modeling
- 65% JD coverage with clear gap analysis
- Cover letter recommendations provided

Example 3: Career Gap Handling

USER: "I have a 2-year gap from starting a company. JD: [paste]"

RESULT:
- Included startup as legitimate role
- Surfaced: fundraising, product development, team building
- Framed gap as entrepreneurial experience
- Generated resume showing initiative and diverse skills

Example 4: Multi-Job Batch (NEW!)

USER: "I want to apply for these 3 TPM roles:
      1. Microsoft 1ES Principal PM
      2. Google Cloud Senior TPM
      3. AWS Container Services Senior PM"

RESULT:
- Detected multi-job mode, user confirmed
- Built library once (29 resumes)
- Gap analysis: 14 total gaps, 8 unique after deduplication
- Shared discovery: 30-min session surfaced 5 new experiences
  * Kubernetes CI/CD for nonprofits
  * Azure migration for university lab
  * Cross-functional leadership examples
- Processed 3 jobs: 85%, 88%, 78% JD coverage
- Time: 40 minutes vs 45 minutes sequential (11% savings)
- All 3 resumes + batch summary generated

Example 5: Incremental Batch Addition (NEW!)

WEEK 1: User processes 3 jobs (Microsoft, Google, AWS) in 40 minutes

WEEK 2:
USER: "I found 2 more jobs at Stripe and Meta. Add them to my batch?"

RESULT:
- Loaded existing batch with 5 previously discovered experiences
- Incremental gap analysis: only 3 new gaps (vs 14 original)
- Quick 10-min discovery session for new gaps only
- Processed 2 additional jobs: 82%, 76% coverage
- Time: 20 minutes (vs 30 if starting from scratch)
- Total: 5 jobs, 8 experiences discovered

Usage Patterns

Internal role (same company):

  • Features most relevant internal experience
  • Uses internal terminology
  • Leverages organizational knowledge

External role (new company):

  • Deep company research
  • Cultural fit emphasis
  • Risk mitigation

Career transition:

  • Title reframing
  • Transferable skill emphasis
  • Bridge domain gaps

With career gaps:

  • Gaps as valuable experience
  • Alternative activities highlighted
  • Truthful, positive framing

Testing

Single-Job Tests

See Testing Guidelines section in SKILL.md (lines 1244-1320)

Key test scenarios:

  • Happy path (full workflow)
  • Minimal library (2 resumes)
  • Research failures (obscure company)
  • Experience discovery value
  • Title reframing accuracy
  • Multi-format generation

Multi-Job Tests (NEW!)

See docs/testing/multi-job-test-checklist.md for comprehensive test cases

Key multi-job scenarios:

  • Happy path (3 similar jobs)
  • Diverse jobs (low overlap detection)
  • Incremental batch addition
  • Pause/resume functionality
  • Individual vs batch review
  • Express mode processing
  • Error handling and graceful degradation

Run tests:

cd ~/.claude/skills/resume-tailoring
# Single-job: Follow test procedures in SKILL.md Testing Guidelines section
# Multi-job: Follow docs/testing/multi-job-test-checklist.md

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes:
    • Update SKILL.md for implementation changes
    • Add tests if applicable
    • Update README if architecture changes
  4. Commit with descriptive messages: git commit -m "feat: add amazing feature"
  5. Push to your fork: git push origin feature/amazing-feature
  6. Open a Pull Request

Before submitting:

  • Run regression tests (see Testing section in SKILL.md)
  • Ensure all phases work end-to-end
  • Update documentation

Troubleshooting

Skill not appearing:

  • Verify files are in ~/.claude/skills/resume-tailoring/
  • Restart Claude Code
  • Check SKILL.md has valid YAML frontmatter

Research phase failing:

  • Check WebSearch capability is enabled
  • Skill will gracefully fall back to JD-only analysis

DOCX/PDF generation failing:

  • Ensure document-skills plugin is installed
  • Skill will fall back to markdown-only output

Low match confidence:

  • Try the Experience Discovery phase
  • Consider adding more resumes to your library
  • Review gap handling recommendations

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built for Claude Code skills framework
  • Designed with truth-preserving optimization principles
  • Inspired by the belief that job opportunities should be based on capabilities, not resume writing skills

Support

Roadmap

  • Cover letter generation integration
  • LinkedIn profile optimization
  • Interview preparation Q&A generation
  • Multi-language resume support
  • Custom industry templates