resume
Resume — One Source, Many Tailored Resumes
A complete resume management system: structured experience data → AI-tailored LaTeX → PDF.
experiences/ → /resume generate → resume.tex → make en → output/Name-Title.pdf
(素材) (AI 定制化) (LaTeX源) (编译) (输出)
Subcommand Routing
Parse $ARGUMENTS to determine which workflow to run:
init [text]→ Init Workflowgenerate [job title or JD file]orgen [...]→ Generate Workflowadd [description]→ Add Experience Workflow- Empty or unrecognized → Show available subcommands and ask user what they want to do
Prerequisites Check
Before any workflow, verify the environment:
- Check if
resume.clsexists in the current working directory. If not, copy from${CLAUDE_SKILL_DIR}/assets/resume.cls - Check if
Makefileexists. If not, copy from${CLAUDE_SKILL_DIR}/assets/Makefile - Create directories if missing:
experiences/work/,jobs/,output/,.history/ - Check if
xelatexis available:which xelatex. If not, warn the user: "XeLaTeX is required. Install with: brew install --cask mactex"
Init Workflow (/resume init [text])
Initialize the experience data library from scratch.
Mode Detection
Based on $ARGUMENTS (after stripping "init"):
- User pasted large text (resume, work history, LinkedIn export) → Import Mode
- Empty or short description → Q&A Mode
- File path provided (PDF/Markdown) → Read file, then Import Mode
Import Mode
- Parse the provided content, extracting: personal info, education, work history (company, period, department, role, projects, metrics), personal projects, skills, honors
- Confirm with user — show structured result, ask about missing info or inaccurate metrics
- Generate files into
experiences/:profile.md— personal info + educationwork/<company>.md— one file per companyprojects.md— personal projectsskills.md— skill inventoryhonors.md— honors + quantified metrics
Q&A Mode
Walk through one question at a time. Never ask multiple questions at once.
- Basic info → name, email, phone, wechat (optional), blog/github (optional) → write
experiences/profile.md - Education → school, degree, major, period, highlights → append to
experiences/profile.md - Work history (loop) → company, department, role, period, projects, metrics, tech stack → write
experiences/work/<company>.md. After each: "Any more work experience?" Continue or move on. - Personal projects → name, link, description, tech stack, highlights → write
experiences/projects.md - Skills → auto-generate from collected tech stacks, show for confirmation → write
experiences/skills.md - Honors → extract quantified metrics from work history + user additions → write
experiences/honors.md
File Format Reference
profile.md:
---
name: Name / English Name
email: email@example.com
phone: "+86 xxx"
wechat: xxx
blog: https://...
github: https://...
---
## Education
### School · College | Degree (Period)
- Major, highlights
work/<company>.md:
---
company: Company Name
company_en: English Name
url: https://...
location: City
period: YYYY/MM -- YYYY/MM
department: Department
role: Role
tags: [tag1, tag2, ...]
---
# Project Name
> Timeline | Role
## Background
...
## Key Work
...
## Metrics
...
## Tech Stack
...
Key principles:
- Keep raw details in experiences — trimming happens at generation time
- Tags should cover core tech and business domain keywords
- Metrics must include specific numbers
- One file per company, filename in lowercase English (e.g.,
bytedance.md)
Generate Workflow (/resume generate [target])
Generate a tailored resume for a specific job target.
Step 1: Read All Materials
Read all files:
experiences/profile.md- All
.mdfiles underexperiences/work/ experiences/projects.mdexperiences/skills.mdexperiences/honors.md
Read ${CLAUDE_SKILL_DIR}/assets/resume-example.tex to understand the LaTeX structure and available commands.
If the argument is a file path, also read that JD file.
Step 2: Analyze Job Requirements
Based on JD or job title, determine:
- Core technical requirements — what skills matter most
- Experience priority — which work experiences are most relevant
- Framing angle — how to present the same experience differently for this role
- Content selection — include/omit personal projects section, which experiences to trim
Step 3: Present the Plan
Before generating .tex, show the user:
- Target positioning (one sentence)
- Content selection (which experiences to include/omit)
- Key differentiation (how this resume differs from a generic one)
Wait for user confirmation before proceeding.
Step 4: Generate LaTeX
Generate resume.tex following these rules:
-
Use resume.cls commands strictly:
\name{},\basicInfo{},\email{},\phone{},\wechat{},\homepage[]{}\section{},\datedsubsection{}{},\role{}{},\rolewithdate{}{}{}itemizewith[parsep=0.25ex]
-
Keep to 1 page (critical for Chinese version):
- 5-6 sections: positioning, education, work, (projects), skills, honors
- 3-5 bullet points per project
- Trim early internships to 1-2 lines each
- If too long, cut early internships and low-relevance bullets first
-
LaTeX header for Chinese:
\documentclass{resume} \usepackage{xeCJK} \setCJKmainfont{SourceHanSerifSC-Medium} \setCJKsansfont{SourceHanSerifSC-Medium} \setCJKmonofont{SourceHanSerifSC-Medium}For English version: remove the three xeCJK lines.
-
Formatting:
- Use
\textbf{【keyword】}to mark each bullet's keyword - Escape:
&→\&,%→\% - Use
\href{url}{text}for hyperlinks
- Use
Step 5: Build
- Backup current
resume.texto.history/resume_$(date +%Y%m%d%H%M%S).tex - Write generated content to
resume.tex - Run
make ento build PDF - Copy PDF to
output/with job-specific name
Step 6: English Version (if requested)
- Remove xeCJK lines
- Translate all content to English
- Build PDF
Add Experience Workflow (/resume add [description])
Add or update experience data incrementally.
Step 1: Classify Input
Determine what the user is adding:
- New work experience → create/update
experiences/work/*.md - New personal project → update
experiences/projects.md - New skill → update
experiences/skills.md - New honor/certification → update
experiences/honors.md - Personal info change → update
experiences/profile.md
Step 2: Read Existing File
Read the target file to understand current content and format.
Step 3: Update
Apply updates following the file format conventions above. Keep raw details — don't trim prematurely.
Step 4: Confirm
Show the diff to the user, confirm before writing.
Step 5: Remind
After updating: "Experience updated. Run /resume generate [target] to regenerate your resume."