原始内容
Resume Skills for Claude Code
Eight skills for resume management: extract PDF/DOCX → coach content discovery → optimize content → format to PDF → generate cover letters → review and iterate.
Installation
/plugin marketplace add https://github.com/vibewith-brent/claude-resume-skills
/plugin install resume-skills@resume-helper-skills
After installation, use skills via natural language (e.g., "Extract my resume from resume.pdf").
Updating Skills
/plugin update resume-skills@resume-helper-skills
After updating, restart Claude Code or start a new conversation to load the updated skills.
Prerequisite
Typst must be installed (brew install typst).
Workflow Overview
The complete resume workflow with versioning at each stage:
flowchart TB
subgraph init["1. Initialize"]
A[PDF/DOCX Resume] --> B[Initialize Project]
B --> C[Import Resume]
C --> D[v1: Original]
end
subgraph extract["2. Extract"]
D --> E[Extract Text]
E --> F[Parse to YAML]
F --> G[Validate Structure]
end
subgraph expand["3. Expand Content"]
G --> G1{Content Complete?}
G1 -->|No| G2[Add New Experience]
G1 -->|Gaps| G3[Discovery Questions]
G2 --> G4[STAR Expansion]
G3 --> G4
G4 --> G5[Update YAML]
G5 --> G1
G1 -->|Yes| H
end
subgraph optimize["4. Optimize"]
H{Target Job?}
H -->|Yes| I[Fetch Job Posting]
I --> J[Keyword Analysis]
J --> K[Tailor Content]
H -->|No| L[General Optimization]
K --> M[ATS + Metrics]
L --> M
M --> N[Create Version]
N --> O[v2: Optimized]
end
subgraph format["5. Format"]
O --> P[Select Template]
P --> Q[Compile PDF]
end
subgraph review["6. Review & Fit"]
Q --> R{Content Fits?}
R -->|No| S[Customize Template]
S --> T[Adjust Spacing/Margins]
T --> Q
R -->|Yes| U{Visual QA Pass?}
U -->|No| V[Fix Issues]
V --> Q
end
subgraph finalize["7. Finalize"]
U -->|Yes| W[Generate Cover Letter]
W --> X[Export Package]
X --> Y[v3: Final for Company X]
end
style init fill:#e1f5fe
style extract fill:#fff3e0
style expand fill:#fff9c4
style optimize fill:#e8f5e9
style format fill:#fce4ec
style review fill:#f3e5f5
style finalize fill:#e0f2f1
Core Loop: Content → Template → Fit
Most time is spent in the format/review loop, customizing templates to fit content:
flowchart LR
A[YAML Content] --> B[Choose Template]
B --> C[Compile PDF]
C --> D{Fits Target Pages?}
D -->|No - Too Long| E[Reduce Spacing/Margins]
D -->|No - Too Short| F[Increase Spacing]
D -->|No - Overflow| G[Reduce Content]
E --> C
F --> C
G --> A
D -->|Yes| H{Visual QA?}
H -->|Issues| I[Adjust Template]
I --> C
H -->|Pass| J[Done]
Skill Responsibilities
flowchart TB
subgraph state["resume-state"]
S1[Init Project]
S2[Import Files]
S3[Create Versions]
S4[Switch/Compare]
end
subgraph extract["resume-extractor"]
E1[PDF → Text]
E2[DOCX → Text]
E3[Text → YAML]
end
subgraph coach["resume-coach"]
CO1[Discovery Questions]
CO2[STAR Expansion]
CO3[Add Experience]
CO4[Gap Analysis]
end
subgraph optimize["resume-optimizer"]
O1[Fetch Job Posting]
O2[Keyword Analysis]
O3[ATS Optimization]
O4[Impact Metrics]
end
subgraph format["resume-formatter"]
F1[YAML → Typst]
F2[Typst → PDF]
F3[5 Templates]
end
subgraph template["resume-template-maker"]
T1[Custom Templates]
T2[Spacing Tuning]
T3[Design Vectors]
end
subgraph review["resume-reviewer"]
R1[Visual QA]
R2[Fit Check]
R3[Issue Detection]
end
subgraph cover["resume-coverletter"]
C1[Generate Letter]
C2[Match Styling]
end
state --> extract
extract --> coach
coach --> optimize
optimize --> format
format --> review
review -->|Issues| template
template --> format
review -->|Pass| cover
Skills
| Skill | Purpose |
|---|---|
| managing-resume-versions | Version control. Initialize projects, import files, branch versions, compare changes. Use first. |
| extracting-resumes | Convert PDF/DOCX to structured YAML |
| coaching-resume-content | Adaptive coaching to discover achievements through conversation. Persists sessions per version for iterative content development. |
| optimizing-resumes | Improve content: ATS optimization, metrics, keyword alignment, job tailoring |
| formatting-resumes | Generate PDFs from YAML using Typst templates |
| generating-cover-letters | Generate cover letters matching resume template styling |
| reviewing-resumes | Visual QA templates — Claude views PDF and fills in checklist |
| creating-resume-templates | Create custom Typst templates for content fitting |
Templates (Starting Points)
Templates are starting points, not final solutions. Most resumes need template customization to fit content on target pages.
| Template | Best For | Key Traits |
|---|---|---|
executive |
2-page professional | Clean hierarchy, navy accents, balanced spacing |
tech-modern |
Creative/startup | Lavender palette, pill skills, single-page optimized |
modern-dense |
Extensive experience | Maximum density, inline skills, ~20-25 bullets |
compact |
1-page constraint | Tight margins, minimal section gaps |
minimal |
Understated | Monochromatic, maximum readability |
Usage
Natural Language (Claude Code)
Skills auto-select based on your request:
"Initialize project ml_engineer and import resume.pdf"
"Extract to YAML and optimize for ATS"
"Help me discover achievements from my last role"
"I can't think of what to put for my current job"
"This bullet is weak - help me expand it"
"Create version for Google, tailor for this job: [URL]"
"Generate PDF with executive template"
"The content overflows - adjust the template to fit on 2 pages"
"Write a cover letter for this role"
"Review the PDF"
Unified CLI
After uv sync, use the resume command:
# Project setup
resume init my_resume # Create new project
resume import resume.pdf # Import existing resume
resume status # Show current project/version
# Content workflow
resume extract resume.pdf # Extract text from PDF/DOCX
resume job "https://..." # Fetch job posting
resume format # Generate PDF (uses active version)
resume format --all-templates # Compare all 5 templates
resume review output.pdf # Review PDF quality
# Version management
resume version list # List all versions
resume version create -t google # Create new version with tag
resume version switch v2 # Switch active version
resume version diff v1 v2 # Compare versions
# Cover letter
resume cover -c "Acme" -p "Engineer" -j job.txt
Key features:
- Auto-detects active project/version when no file specified
--all-templatescompiles with all 5 templates for comparison- Combines YAML→Typst→PDF in single
formatcommand
Structure
resume-*/ # Skill directories (SKILL.md + scripts/ + references/)
.claude-plugin/ # Plugin marketplace configuration
.resume_versions/ # Version store (projects, sources, versions)
YAML Schema
Required: contact
Recommended: summary, experience, skills, education
Optional: certifications, projects, publications, awards, languages, volunteer
Experience supports nested positions (multiple roles at same company). Full schema: resume-extractor/references/resume_schema.yaml
The formatter validates YAML against the schema before rendering. Use --skip-validation for legacy formats:
uv run resume-formatter/scripts/yaml_to_typst.py resume.yaml executive --skip-validation
Troubleshooting
| Issue | Fix |
|---|---|
| Skills not loading | Check /plugin list; reinstall with /plugin install resume-skills@resume-helper-skills |
| Schema validation failed | Fix YAML structure per error messages, or use --skip-validation for legacy formats |
| Typst errors | Check typst --version; escape special chars in YAML |
| Content overflow | Reduce bullets (4-6/role), try compact template |
| State not found | Run init_project.py <name> |
Development
uv sync # Install dependencies
uv sync --extra dev # Include test dependencies
Local Development
Use plugin marketplace only. Do not create .claude/skills/ symlinks — this causes duplicate skills to appear (once as (project) and again as (plugin)).
Workflow:
- Modify skill sources in
resume-*/directories - Run
/plugin update resume-skills@resume-helper-skills - Restart Claude Code or start a new conversation
- Test changes
Testing
uv run pytest tests/ # Run all tests
uv run pytest tests/ -v # Verbose output
uv run pytest tests/ --cov # With coverage
Adding Skills
- Create
resume-newskill/SKILL.mdwith gerund-form name:--- name: doing-something-with-resumes description: Does X to resumes. Use when user wants Y or mentions Z. --- - Add
scripts/andreferences/as needed - Add skill path to
.claude-plugin/marketplace.json
Best practices:
- Use gerund form for names (e.g.,
formatting-resumes, notresume-formatter) - Include "Use when" trigger phrases in descriptions
- Write in third person
See Skill Authoring Best Practices.
Roadmap & Known Gaps
Current gaps and potential improvements:
Content Analysis
| Gap | Description | Priority |
|---|---|---|
| ATS Scoring | Automated scoring of resume against job description (keyword match %, format compliance) | High |
| Content Analytics | Word count, keyword density, bullet length analysis, reading level | Medium |
| Duplicate Detection | Flag similar bullets across roles, suggest consolidation | Low |
Template & Formatting
| Gap | Description | Priority |
|---|---|---|
| Template Preview | Side-by-side preview of all templates with same content | High |
| Auto-Fit | Automatically adjust spacing to hit target page count | High |
| Multi-Column Layout | Two-column and sidebar template variants | Medium |
| Dark Mode Templates | Templates optimized for on-screen viewing | Low |
Workflow & Integration
| Gap | Description | Priority |
|---|---|---|
| Application Tracker | Track which versions sent to which companies, response status | High |
| LinkedIn Import | Extract resume data from LinkedIn profile URL | Medium |
| Job Board Integration | Direct fetch from LinkedIn, Indeed, Greenhouse job postings | Medium |
| Version Comparison PDF | Visual diff of two resume PDFs side-by-side | Medium |
AI Enhancements
| Gap | Description | Priority |
|---|---|---|
| Industry Benchmarking | Compare resume against successful examples in same field | Medium |
| Interview Prep | Generate likely interview questions from resume content | Low |
Contributions Welcome
PRs welcome for any of the above. See Contributing for guidelines.
flowchart LR
subgraph current["Current Skills"]
A[State] --> B[Extract]
B --> C[Coach]
C --> D[Optimize]
D --> E[Format]
E --> F[Review]
F --> G[Cover Letter]
end
subgraph planned["Planned Additions"]
H[ATS Score]
I[Auto-Fit]
J[App Tracker]
end
D -.-> H
E -.-> I
G -.-> J
style planned fill:#fff9c4
Contributing
PRs welcome. Priority areas:
- ATS scoring - Keyword match %, format compliance scoring
- Auto-fit - Automatic spacing adjustment to hit target pages
- Application tracking - Track versions sent to companies
License
MIT — see LICENSE
Resources
- Typst — Modern typesetting
- Claude Code Skills — Official docs
- Claude Code Plugins — Plugin marketplace docs