Help us improve
Share bugs, ideas, or general feedback.
From resume-tailor
Tailors a resume to a specific job description with ATS optimization, supports EN/US and RU/CIS locales.
npx claudepluginhub olegvg/resume-tailor-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/resume-tailor:resume-tailorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Multi-stage skill that transforms a resume into an ATS-optimized document tailored to a specific job description. Supports EN/US and RU/CIS locales. Replaces generic AI resume services with job-specific, strategic tailoring.
Generates ATS-optimized resumes tailored to job postings from master resumes or experience data, producing .docx files via Python rendering.
Generates ATS-optimized resumes tailored to job postings using profile data and evaluations, outputting clean printable HTML. Auto-activates on 'tailor my resume' or similar requests.
Generates tailored resumes for job applications: researches company/role, surfaces undocumented experiences via discovery, matches from resume library, outputs MD/DOCX/PDF while preserving facts.
Share bugs, ideas, or general feedback.
Multi-stage skill that transforms a resume into an ATS-optimized document tailored to a specific job description. Supports EN/US and RU/CIS locales. Replaces generic AI resume services with job-specific, strategic tailoring.
Read these files at the appropriate stage — they contain rules, conventions, and templates:
references/ats-rules.md — ATS formatting rules, keyword strategy, scoring formula, anti-patternsreferences/locale-en.md — English/US resume conventionsreferences/locale-ru.md — Russian/CIS resume conventionsreferences/section-templates.md — Section templates with slot markers for both localesreferences/html-template-en.html — EN HTML template for weasyprint PDF (no photo, centered header, 170px skills grid)references/html-template-ru.html — RU HTML template for weasyprint PDF (photo, flexbox header, 135px/8.5pt skills grid)Location: docs/resume/master-profile.md
The master profile is a comprehensive data store of the user's career — every role, metric, skill, and transition context. It is NOT a formatted resume. The skill tailors FROM the master profile for each job application.
Master profile structure:
# Master Profile
## Contact (name, email, phone, LinkedIn, location)
## Career Narrative (raw, unformatted — the full story)
## Visibility Schema (enum definitions and known variants)
## Roles (each with: Visibility, Variants, company context, title, dates, team size/structure, responsibilities, achievements with metrics, technologies)
## Education (with Visibility)
## Certifications
## Skills Inventory (comprehensive, not pre-filtered)
## Languages
## Notes (gaps, side projects, consulting arrangements, etc.)
The master profile may include a Visibility field on each role and section. If the master profile has no Visibility fields, treat all roles as always.
| Value | Meaning | Behavior |
|---|---|---|
always | Include in all resume variants | Always consider for inclusion |
variant-specific | Only in variants listed in Variants field | Include only if target variant matches or user explicitly requests |
on-request | Never include unless user explicitly asks | Skip by default |
reference-only | Alias/metadata, not content | Never include in any output |
Variants are defined in the master profile's Visibility Schema section. Read them from there — do not hardcode.
always → includevariant-specific → include only if target variant is in Variants list AND not explicitly excluded by useron-request → skip unless user explicitly names the role or asks for a full/comprehensive resumereference-only → never includeVisibility the same way.on-request role — include it. If user excludes a variant — drop all roles where that variant is the only match.STAGE 0: Resolve Inputs
|
STAGE 1: Intake & Analysis (subagent)
|
STAGE 1.5: Resume Feedback (presented to user)
|
STAGE 2: Strategic Questions (AskUserQuestion)
|
STAGE 3: ATS Optimization & Tailoring
|
STAGE 4: Draft Generation (.md)
|
STAGE 5: Review & Iteration
|
STAGE 6: Final Output (.docx + optional cover letter)
IF arguments contain a file path (PDF/MD/TXT):
Read the file
ELIF docs/resume/master-profile.md exists:
Read it. Confirm with user: "Using your master profile as the base. Correct?"
ELSE:
Ask: "Please provide your resume — paste text, give a file path, or attach a PDF."
IF arguments contain a URL (https://...):
WebFetch the URL
Extract: title, company, requirements, responsibilities, qualifications
If fetch returns insufficient content: ask user to paste the JD text instead
ELIF arguments contain pasted text:
Parse directly
ELSE:
Ask: "Provide the target job description — paste the text or give me a URL."
If no master profile exists and a resume was provided, build the master profile:
docs/resume/master-profile.mdUse a subagent for this stage to protect the main context from heavy parsing.
The subagent receives:
The subagent must extract and return:
Present the analysis results to the user before asking strategic questions. This gives the user context for their answers and surfaces issues that may need discussion.
Present a structured feedback report:
## Resume Analysis for [JD Target Role] at [Company]
### Strengths (what works well for this role)
- [Strength 1 — specific, tied to JD requirement]
- [Strength 2]
- [Strength 3]
### Issues to Address
- [Issue 1 — specific problem with actionable suggestion]
- [Issue 2]
### Gap Analysis vs Job Description
| JD Requirement | Your Coverage | Status |
|---|---|---|
| [Required skill/experience] | [Where it appears in resume or "Not found"] | Match / Partial / Gap |
### Red Flags (if any)
- [Date overlaps, unexplained gaps, title inconsistencies — only if present]
### Recommendations
- [Concrete suggestion 1 — e.g., "Your Role X metrics (30% cost reduction) directly map to their 'cost optimization' requirement — should be prominent"]
- [Concrete suggestion 2 — e.g., "Adjacent domain experience at Company Y is a differentiator, not a distraction — reframe as 'distributed systems in adversarial environments'"]
After the main feedback, present a separate block listing every role and section excluded from this resume and why:
### Excluded from This Resume
| Role / Section | Visibility | Reason Excluded |
|---|---|---|
| [Role name] | variant-specific | Variant "X" does not match target variant "Y" |
| [Role name] | variant-specific | Variant "X" explicitly excluded by user |
| [Role name] | on-request | Not explicitly requested |
| [Section name] | on-request | Not explicitly requested |
Rules for this report:
always roles are never listed here (they're always included).reference-only entries are never listed here (they're metadata, not roles).Say: "This is my analysis of your resume against this specific JD. Above is the list of roles I'm excluding and why. If you want to include or exclude anything differently, let me know. Now let me ask a few strategic questions before I start."
Then proceed to Stage 2.
Ask 3-5 questions via AskUserQuestion. Adapt based on what the analysis reveals.
Q1: Locale
"Target locale for this resume?"
Options:
- English/US (no photo, no DOB, experience before education, 1-2 pages)
- Russian/CIS (photo, DOB, education before experience, 2-3 pages)
Q2: Positioning
"Based on this JD, I see [brief JD summary]. How should I position you?"
Options:
- Technical depth (hands-on architecture, system design, specific tech expertise)
- Leadership breadth (team scaling, org design, strategy, stakeholder management)
- Balanced (let me decide based on JD emphasis)
Q3: Emphasis
"Your strongest matches for this role are: [top 3-4 from gap analysis].
Gaps I identified: [top 2-3].
Which roles or achievements should I highlight most? Anything to de-emphasize?"
Options:
- Use my recommendations as-is
- [User provides specific guidance]
Q4: Date Overlaps (only if detected in analysis)
"I see overlapping dates: [Role A: dates] and [Role B: dates]. How should I present this?"
Options:
- Concurrent roles (consulting + employment)
- Transition period (brief overlap during handoff)
- Part-time / advisory capacity
- [User explains]
Q5: Domain Scope (only if resume contains domains not in JD)
"Your resume includes [domain X] experience. The JD focuses on [domain Y]. How should I handle it?"
Options:
- Keep with reduced detail (shows breadth)
- Reframe to highlight transferable skills
- Minimize (focus entirely on target domain)
Q6: Cover Letter
"Should I generate a cover letter for this application?"
Options:
- Yes
- No, resume only
After all questions: compile a tailoring strategy document (internal, not saved) capturing:
Read the appropriate reference files:
references/ats-rules.md (always)references/locale-en.md OR references/locale-ru.md (based on Q1)references/section-templates.md (always)Write specifically for THIS role using the template from section-templates.md.
Save to: docs/resume/draft-[company-slug]-[YYYY-MM-DD].md
The draft file contains:
<!-- ATS-ANALYSIS-START --><!-- ATS-ANALYSIS-START -->
## ATS Analysis (review only — not included in final document)
### Estimated ATS Score: [XX]%
### Keyword Coverage
| JD Requirement | Found In | Section |
|---|---|---|
| [skill/requirement] | Yes/No | [where it appears] |
### Scoring Breakdown
- Required skills coverage: X/Y (Z%)
- Nice-to-have coverage: X/Y (Z%)
- Achievement quantification rate: Z%
- Section completeness: Z%
- Keyword distribution: Z%
### Gaps Remaining
- [requirement not addressed and why]
### Tailoring Decisions Applied
- Locale: [choice]
- Positioning: [choice]
- Emphasized: [what]
- De-emphasized: [what]
- Cover letter: [yes/no]
"Here is your tailored resume draft. The ATS analysis section at the bottom shows keyword coverage and scoring — it will not appear in the final document. Please review and let me know what to adjust."
LOOP:
Wait for user feedback
IF "approved" / "looks good" / "finalize" / "done":
Proceed to Stage 6
ELSE:
Apply requested changes to the draft
Re-calculate ATS score
Update the draft file
Present updated version with changes highlighted
Strip the ATS Analysis section (everything after the <!-- ATS-ANALYSIS-START --> marker).
Why not pandoc? Pandoc with xelatex ignores CSS styling and renders photos at full page size. Pandoc with wkhtmltopdf requires a separate binary. weasyprint renders HTML+CSS faithfully — photo sizing, flexbox layout, colors, fonts all work correctly.
Step 1: Create styled HTML
Save to docs/resume/resume-[slug].html. Use the appropriate HTML template as a starting point:
references/html-template-en.html (centered header, no photo, 170px skills grid, 9pt skills)references/html-template-ru.html (flexbox header with photo, 135px skills grid, 8.5pt skills)Replace [SLOT_MARKERS] with actual content. Key design rules:
break-inside: avoid on .role and .condensed prevents page-split mid-roledocs/resume/photo.jpeg (90x90px, border-radius 6px)Step 2: Convert HTML to PDF
cd docs/resume && DYLD_LIBRARY_PATH="$(brew --prefix)/lib" uv run weasyprint resume-[slug].html [Name]-[TargetRole].pdf
Requires weasyprint (already in project deps via uv add weasyprint).
System deps (glib, pango, cairo) are installed via brew.
DYLD_LIBRARY_PATH is needed on macOS for weasyprint to find gobject.
Target page counts:
Generate using the cover letter template from references/section-templates.md:
docs/resume/cover-letter-[slug]-[date].htmlList all generated files:
Generated files:
- Resume (markdown draft): docs/resume/draft-[slug]-[date].md
- Resume (HTML source): docs/resume/resume-[slug].html
- Resume (PDF): docs/resume/[Name]-[TargetRole].pdf
- Cover letter (HTML): docs/resume/cover-letter-[slug]-[date].html [if applicable]
- Cover letter (PDF): docs/resume/cover-letter-[slug]-[date].pdf [if applicable]
"Would you like me to update your master profile with any new information from this session?"
Run this checklist before presenting the draft in Stage 4. Every item must pass.