resume-tailoring
varunr89/resume-tailoring-skillUse 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
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:
- Job description (text or URL)
- Resume library location (defaults to
resumes/in current directory)
Workflow:
- Build library from existing resumes
- Research company/role
- Create template (with user checkpoint)
- Optional: Branching experience discovery
- Match content with confidence scoring
- Generate MD + DOCX + PDF + Report
- User review → Optional library update
Implementation
See supporting files:
research-prompts.md- Structured prompts for company/role researchmatching-strategies.md- Content matching algorithms and scoringbranching-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:
-
Locate resume directory:
User provides path OR default to ./resumes/ Validate directory exists -
Scan for markdown files:
Use Glob tool: pattern="*.md" path={resume_directory} Count files found Announce: "Building resume library... found {N} resumes" -
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
-
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" } } -
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:
-
Emphasize different aspects:
- "Graduate Researcher" → "Research Software Engineer" (if coding-heavy)
- "Data Science Lead" → "Technical Program Manager" (if leadership)
-
Use industry-standard terminology:
- "Scientist III" → "Senior Research Scientist" (clearer seniority)
- "Program Coordinator" → "Project Manager" (standard term)
-
Add specialization when truthful:
- "Engineer" → "ML Engineer" (if ML work substantial)
- "Researcher" → "Computational Ecologist" (if computational methods)
-
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):
-
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?"
-
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
-
Follow-up systematically:
- Ask "what," "how," "why" to get details
- Quantify: "Any metrics?"
- Contextualize: "Was this production?"
- Validate: "Does this address the gap?"
-
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:
-
Extract all candidate bullets from library
- All bullets from library database
- All newly discovered experiences
- Include source resume for each
-
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)
-
Rank candidates by score
- Sort high to low
- Group by confidence band:
- 90-100%: DIRECT
- 75-89%: TRANSFERABLE
- 60-74%: ADJACENT
- <60%: WEAK/GAP
-
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 -
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:
-
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 -
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} -
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}" } ] } -
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.
Table of Contents
- Overview
- Installation
- Prerequisites
- Quick Start
- Key Features
- Architecture
- Usage Examples
- Contributing
- License
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)
-
Clone the repository:
git clone https://github.com/varunr89/resume-tailoring-skill.git ~/.claude/skills/resume-tailoring -
Verify installation:
ls ~/.claude/skills/resume-tailoringYou should see:
SKILL.md,research-prompts.md,matching-strategies.md,branching-questions.md,README.md -
Restart Claude Code (if already running)
Option 2: Manual Installation
-
Create the skill directory:
mkdir -p ~/.claude/skills/resume-tailoring -
Download the files:
- Download all files from this repository
- Place them in
~/.claude/skills/resume-tailoring/
-
Verify installation:
- Open Claude Code
- Type
/skillsto see available skills resume-tailoringshould 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-skillsplugin (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:
- Build library from existing resumes
- Research company and role
- Create optimized template (with checkpoint)
- Offer branching experience discovery
- Match content with confidence scores (with checkpoint)
- Generate MD + DOCX + PDF + Report
- 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:
- Detect multi-job intent and offer batch mode
- Build library once (shared across all jobs)
- Analyze gaps across ALL jobs (deduplicates common requirements)
- Conduct single discovery session addressing all gaps
- Process each job individually (research + tailoring)
- 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 workflowsmulti-job-workflow.md- Complete multi-job batch processing workflowresearch-prompts.md- Company/role research templatesmatching-strategies.md- Content scoring algorithmsbranching-questions.md- Experience discovery patterns
Documentation
README.md- This fileMARKETPLACE.md- Marketplace listing informationSUBMISSION_GUIDE.md- Skill submission guidelines
Supporting Documentation (docs/)
docs/schemas/- Data structure schemas for batch processingbatch-state-schema.md- Batch state tracking structurejob-schema.md- Job object schema
docs/plans/- Design documents and implementation plans2025-11-04-multi-job-resume-tailoring-design.md- Multi-job feature design2025-11-04-multi-job-implementation-summary.md- Implementation summary
docs/testing/- Testing checklistsmulti-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:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes:
- Update
SKILL.mdfor implementation changes - Add tests if applicable
- Update README if architecture changes
- Update
- Commit with descriptive messages:
git commit -m "feat: add amazing feature" - Push to your fork:
git push origin feature/amazing-feature - 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-skillsplugin 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
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Roadmap
- Cover letter generation integration
- LinkedIn profile optimization
- Interview preparation Q&A generation
- Multi-language resume support
- Custom industry templates