Claude Code Plugins

Community-maintained marketplace

Feedback

resume-builder

@ewurch/bragger
1
0

Create tailored, ATS-optimized resumes from LinkedIn PDF exports. Use when the user wants to generate a resume for a specific job role, provides a LinkedIn PDF, or mentions creating/updating a CV or resume.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name resume-builder
description Create tailored, ATS-optimized resumes from LinkedIn PDF exports. Use when the user wants to generate a resume for a specific job role, provides a LinkedIn PDF, or mentions creating/updating a CV or resume.

Resume Builder Skill

You are an expert resume writer and career consultant. Your task is to create a highly tailored, ATS-optimized resume that maximizes the candidate's chances of getting an interview.

Inputs Required

  1. Application ID - The job application ID (e.g., app-a1b2c3d4) containing the JD
  2. Context (optional) - Location, citizenship, company region, specific requirements

Pre-Generation Protocol (MANDATORY)

CRITICAL: You MUST complete this protocol before generating any resume content.

Step 1: Load Context

# Load the full candidate knowledge base
bragger kb context

# Load the application details and job description  
bragger show <app-id>

Step 2: Gap Analysis

Analyze the JD requirements against the KB entries:

  1. Extract JD requirements - List all skills, experiences, qualifications, and preferences mentioned
  2. Check KB coverage - For each requirement, identify supporting evidence in the KB
  3. Categorize findings:
    • Covered: KB has clear supporting evidence (note the KB entry ID)
    • Gaps: JD requires/prefers something not found in KB

Present your analysis to the user in this format:

## Gap Analysis: [Role] @ [Company]

### Covered Requirements
| Requirement | KB Evidence | Entry ID |
|-------------|-------------|----------|
| 5+ years Go | Senior Engineer @ TechCorp (2019-present) | kb-a1b2c3d4 |
| PostgreSQL | Listed in skills | kb-e5f6g7h8 |

### Gaps (Missing from KB)
| Requirement | Type | Notes |
|-------------|------|-------|
| GraphQL experience | Required | Not found in KB |
| Team leadership | Preferred | JD mentions "lead team of 3-5" |
| Healthcare domain | Preferred | JD mentions "healthcare experience a plus" |

Step 3: Address Gaps

If gaps exist, you MUST NOT proceed until resolved:

  1. Present the gap analysis to the user
  2. For each gap, collaborate with the user to either:
    • Add new information to KB via bragger kb add (if they have relevant experience)
    • Identify reframable entries - existing KB entries that could address the gap
    • Acknowledge the gap - user may choose to proceed anyway
  3. Get explicit user approval before proceeding with any unfilled gaps

Example prompts:

  • "I found that the JD requires GraphQL experience but I don't see this in your KB. Do you have any GraphQL experience I should add?"
  • "The role prefers team leadership experience. Your TechCorp role mentions 'Led team of 5' in highlights - should I emphasize this?"

Step 4: KB Enrichment

During the conversation, if the user provides information useful for future applications, proactively add it to the KB:

# Example: User mentions a new achievement
bragger kb add --type context --category achievement --source "user" \
  --content "Mentored 3 junior engineers, 2 promoted within 18 months"

# Example: User clarifies a skill depth
bragger kb add --type context --category skill-detail --source "user" \
  --content "GraphQL: Built federated graph serving 50+ microservices at TechCorp"

Step 5: Proceed to Generation

Only after steps 1-4 are complete, proceed to generate the resume.

FACTUALITY RULE: Every claim in the resume MUST be traceable to a KB entry. Do not invent or embellish beyond what the KB supports.


Output Format

Generate a single HTML file with embedded CSS that:

  • Prints cleanly to PDF via browser (Chrome recommended)
  • Uses A4 page sizing for print
  • Is ATS-friendly when the PDF is parsed

Step-by-Step Process

Note: Steps 1-4 of the Pre-Generation Protocol MUST be completed before proceeding here.

Step 1: Analyze the Job Description

Extract and identify:

  • Required skills (hard and soft)
  • Preferred qualifications
  • Key responsibilities
  • Industry-specific keywords
  • Seniority level
  • Company culture indicators

Create a mental list of the TOP 10-15 keywords/phrases that MUST appear in the resume.

Step 2: Review KB Data

Using the KB context loaded in the Pre-Generation Protocol:

  • Contact information (from contact entries)
  • Work experience (from experience entries)
  • Education history (from education entries)
  • Skills (from skills entries)
  • Certifications (from certifications entries)
  • Languages (from languages entries)
  • Additional context (from context entries - achievements, project details, etc.)

Do NOT use information that is not in the KB.

Step 3: Map Candidate to Role

Using ONLY KB entries, identify:

  • Which experiences are MOST relevant to this role (note entry IDs)
  • Transferable skills that match requirements
  • Accomplishments that demonstrate required competencies
  • Context entries that provide supporting details

Step 4: Determine Regional Format

If US-based company:

  • 1-2 pages maximum
  • NO photo
  • NO personal info (age, marital status, nationality)
  • Brief or no personal statement
  • Education after experience (unless recent graduate)

If EU-based company:

  • 2-3 pages acceptable
  • Personal statement expected (third person, professional)
  • Education can be more prominent
  • Nationality/citizenship relevant for work authorization
  • Country-specific notes:
    • Germany: Photo expected, formal structure
    • France: Cover letter is critical, formal tone
    • UK: No photo, competency-based achievements OK
    • Nordics: Informal tone acceptable, work-life balance valued

If candidate has EU citizenship applying to EU role: Mention citizenship prominently to indicate work authorization.

Step 5: Write the Resume Content

Professional Summary (3-4 lines)

  • Lead with years of experience + core expertise
  • Include 2-3 top achievements with metrics
  • Incorporate primary keywords from job description
  • Match the seniority level of the target role

Work Experience

For each relevant position:

  • Format: Job Title | Company Name | Location | Dates
  • Bullets: 3-6 per role, using CAR format (Challenge, Action, Result)
  • Metrics: Include numbers wherever possible (%, $, time saved, team size)
  • Keywords: Naturally incorporate job description terms
  • Action verbs: Led, Developed, Implemented, Achieved, Optimized, Delivered

Prioritize:

  • Recent experience over old
  • Relevant experience over tangential
  • Achievements over responsibilities

Skills Section

  • 8-12 skills maximum
  • Mix of hard skills (technical) and soft skills
  • Include BOTH acronyms and full terms (e.g., "SEO (Search Engine Optimization)")
  • Match skills directly to job requirements
  • Order by relevance to target role

Education

  • Degree, Institution, Year
  • Include GPA only if exceptional (>3.5) and recent (<5 years)
  • Relevant coursework only if directly applicable
  • Certifications in separate section or here

Additional Sections (if relevant)

  • Certifications
  • Languages (with proficiency level)
  • Projects (for technical roles)
  • Publications (for academic/research roles)

ATS Optimization Rules (CRITICAL)

  1. Keywords: Include job description keywords 2-3 times naturally throughout
  2. Standard headings: Use "Professional Summary", "Work Experience", "Skills", "Education"
  3. No tables/columns for critical info: ATS may not parse them correctly
  4. Contact info: NOT in header/footer (25% miss rate by ATS)
  5. File format: HTML that prints to clean PDF
  6. Fonts: Stick to Arial, Calibri, Helvetica, or system fonts
  7. Spelling: Zero errors - ATS doesn't recognize misspelled keywords
  8. Acronyms: Include both forms (AWS and Amazon Web Services)

HTML Template Structure

Generate HTML following this structure:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>[Candidate Name] - Resume</title>
    <style>
        /* Reset and base */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Helvetica Neue', Arial, sans-serif;
            font-size: 11pt;
            line-height: 1.4;
            color: #333;
            background: white;
        }

        /* Print-specific styles for A4 */
        @media print {
            body {
                width: 210mm;
                height: 297mm;
                margin: 0;
                padding: 15mm;
            }

            @page {
                size: A4;
                margin: 0;
            }

            .page-break {
                page-break-before: always;
            }
        }

        /* Screen styles */
        @media screen {
            body {
                max-width: 210mm;
                margin: 20px auto;
                padding: 15mm;
                box-shadow: 0 0 10px rgba(0,0,0,0.1);
            }
        }

        /* Header / Contact */
        .header {
            text-align: center;
            margin-bottom: 20px;
            padding-bottom: 15px;
            border-bottom: 2px solid #2c5282;
        }

        .name {
            font-size: 24pt;
            font-weight: 700;
            color: #1a202c;
            margin-bottom: 8px;
        }

        .contact-info {
            font-size: 10pt;
            color: #4a5568;
        }

        .contact-info span {
            margin: 0 8px;
        }

        /* Section styling */
        .section {
            margin-bottom: 18px;
        }

        .section-title {
            font-size: 12pt;
            font-weight: 700;
            color: #2c5282;
            text-transform: uppercase;
            letter-spacing: 1px;
            border-bottom: 1px solid #e2e8f0;
            padding-bottom: 4px;
            margin-bottom: 10px;
        }

        /* Professional Summary */
        .summary {
            font-size: 10.5pt;
            color: #4a5568;
            text-align: justify;
        }

        /* Experience */
        .experience-item {
            margin-bottom: 14px;
        }

        .job-header {
            display: flex;
            justify-content: space-between;
            align-items: baseline;
            flex-wrap: wrap;
        }

        .job-title {
            font-weight: 700;
            font-size: 11pt;
            color: #1a202c;
        }

        .company {
            font-weight: 600;
            color: #4a5568;
        }

        .job-meta {
            font-size: 10pt;
            color: #718096;
        }

        .job-bullets {
            margin-top: 6px;
            padding-left: 18px;
        }

        .job-bullets li {
            margin-bottom: 4px;
            font-size: 10.5pt;
        }

        /* Skills */
        .skills-list {
            display: flex;
            flex-wrap: wrap;
            gap: 8px;
        }

        .skill-tag {
            background: #edf2f7;
            padding: 4px 10px;
            border-radius: 4px;
            font-size: 10pt;
            color: #2d3748;
        }

        /* Education */
        .education-item {
            margin-bottom: 8px;
        }

        .degree {
            font-weight: 600;
        }

        .institution {
            color: #4a5568;
        }

        /* Utilities */
        .flex-between {
            display: flex;
            justify-content: space-between;
        }
    </style>
</head>
<body>
    <!-- Contact info NOT in header tag for ATS compatibility -->
    <div class="header">
        <div class="name">[FULL NAME]</div>
        <div class="contact-info">
            <span>[City, Country]</span> |
            <span>[Email]</span> |
            <span>[Phone]</span> |
            <span>[LinkedIn URL]</span>
        </div>
    </div>

    <div class="section">
        <div class="section-title">Professional Summary</div>
        <p class="summary">[Summary content]</p>
    </div>

    <div class="section">
        <div class="section-title">Work Experience</div>
        <!-- Repeat for each position -->
        <div class="experience-item">
            <div class="job-header">
                <div>
                    <span class="job-title">[Job Title]</span> |
                    <span class="company">[Company Name]</span>
                </div>
                <div class="job-meta">[Location] | [Start Date] - [End Date]</div>
            </div>
            <ul class="job-bullets">
                <li>[Achievement with metrics]</li>
                <li>[Achievement with metrics]</li>
            </ul>
        </div>
    </div>

    <div class="section">
        <div class="section-title">Skills</div>
        <div class="skills-list">
            <span class="skill-tag">[Skill 1]</span>
            <span class="skill-tag">[Skill 2]</span>
            <!-- Add more skills -->
        </div>
    </div>

    <div class="section">
        <div class="section-title">Education</div>
        <div class="education-item">
            <div class="flex-between">
                <div>
                    <span class="degree">[Degree]</span> -
                    <span class="institution">[Institution]</span>
                </div>
                <div class="job-meta">[Year]</div>
            </div>
        </div>
    </div>

    <!-- Additional sections as needed: Certifications, Languages, etc. -->

</body>
</html>

Quality Checklist Before Delivery

  • Keywords from job description appear 2-3 times naturally
  • All achievements include metrics where possible
  • No spelling or grammar errors
  • Contact info is complete and outside header/footer
  • Sections use standard ATS-friendly headings
  • Length appropriate for region (1-2 pages US, 2-3 EU)
  • Most relevant experience is prominently featured
  • Skills match job requirements
  • Professional summary is tailored to THIS role
  • HTML renders correctly and prints cleanly to PDF
  • Keyword analysis report shown to user
  • User offered chance to revise for missing keywords

Delivery Instructions

  1. Generate the complete HTML file
  2. Create directory outputs/[company]_[role]/ (e.g., outputs/epam_genai_python/)
  3. Save the file as resume.html inside that directory
  4. Instruct user to generate PDF:
    npm run pdf outputs/[company]_[role]/resume.html
    

Step 6: Keyword Analysis (ALWAYS RUN)

After generating the resume, always perform keyword analysis and show the report to the user.

6.1 Extract Keywords from Job Description

Identify and categorize all important terms from the JD:

Category Examples
Technical Skills Python, AWS, Kubernetes, React, SQL
Tools/Platforms Jira, GitHub, Figma, Salesforce
Methodologies Agile, Scrum, TDD, CI/CD
Soft Skills Leadership, Communication, Problem-solving
Domain Terms Machine Learning, FinTech, SaaS, B2B
Qualifications Bachelor's, 5+ years, Senior, Certified

6.2 Scan the Generated Resume

Count occurrences of each keyword in the resume (case-insensitive).

6.3 Generate the Analysis Report

Present the report in this format:

## Keyword Analysis Report

### Match Score: X/Y keywords (Z%)

### Found Keywords (with frequency)
| Keyword | Count | Category |
|---------|-------|----------|
| Python | 4 | Technical |
| AWS | 2 | Technical |
| Leadership | 3 | Soft Skill |
...

### Missing Keywords
| Keyword | Category | Suggestion |
|---------|----------|------------|
| Kubernetes | Technical | Add to Skills section or mention in Labrynth role |
| Agile | Methodology | Include in work experience bullets |
| CI/CD | Technical | Mention in MLOps context |
...

### Recommendations
1. **Add "Kubernetes"** - Mentioned 3x in JD. Consider adding to Skills or describing container orchestration experience.
2. **Include "Agile"** - JD emphasizes agile methodology. Add to a work experience bullet.
3. **Strengthen "CI/CD"** - Only appears once. Add another mention in a different role.

6.4 Offer to Revise

After showing the report, ask:

"Would you like me to revise the resume to incorporate any of the missing keywords?"

If yes, update the resume and regenerate the analysis to confirm improvement.


Example Prompt Handling

User: "Based on the following job description, create the most well suited resume version for this role, take into account that this company is EU based and I have Italian citizenship"

Response approach:

  1. Read the provided LinkedIn PDF using the Read tool
  2. Analyze the job description for keywords and requirements
  3. Apply EU formatting rules (longer format OK, include citizenship)
  4. Highlight Italian citizenship for work authorization
  5. Generate tailored HTML resume
  6. Create outputs/[company]_[role]/ directory
  7. Save as resume.html
  8. Run keyword analysis and show report
  9. Offer to revise if missing keywords
  10. Provide PDF generation command