CV Skill
Create role-targeted, black-and-white, Harvard-style resumes and matching cover letters from candidate descriptions, structured input, or existing resumes.
Use this skill when
- The user wants a professional resume or CV in
.docx - The user wants a concise cover letter matched to a role and employer
- The user gives a rough candidate description and wants the agent to draft the resume from scratch
- The user wants one candidate rewritten into multiple job-targeted versions
- The user provides a PDF, notes, or rough bullets and wants a polished resume
- The user wants tighter, more professional bullets without fluff
- The user wants a Harvard-style layout with larger spacing and clean hierarchy
- The user needs output in a language other than Chinese or English
Workflow
1. Gather candidate data
Use the structured schema in references/input-schema.md.
If you are starting from an existing resume, extract:
- contact info
- summary / positioning
- education
- work experience
- projects
- campus or extracurricular items
- tools, languages, certificates
- target job directions
2. Define track-specific positioning
For each job direction, rewrite:
- resume title
- 2-3 sentence summary
- bullet emphasis within experience
- skills ordering
- optional cover letter angle: opening fit, 1-2 proof examples, closing
Keep facts intact. Do not invent results or responsibilities.
3. Apply Harvard-style resume rules
Use references/harvard-hes-2024-notes.md as the quality checklist:
- tailor content to the target role or industry
- keep format consistent and easy to skim
- use reverse chronological order within sections unless relevance requires a different order
- start bullets with active verbs and include scope, skills, and impact
- quantify results when the source material supports it
- remove personal pronouns, photos, age, marital status, references, slang, and low-signal filler
- check contact email and phone are present before delivery
4. Generate the resume
Run:
python3 scripts/generate_resume.py --input assets/example_profile.json --track all --output-dir /tmp/cv-output
Generate a specific track:
python3 scripts/generate_resume.py --input candidate.json --track operations --output-dir /tmp/cv-output
Try PDF export when LibreOffice is installed:
python3 scripts/generate_resume.py --input candidate.json --track all --output-dir /tmp/cv-output --pdf
If python-docx is missing, install dependencies first:
python3 -m pip install -r requirements.txt
5. Draft a matching cover letter when requested
Use the same font family and general spacing as the resume.
Cover letter structure:
- recipient block when known; otherwise use a clean generic greeting
- opening paragraph naming the role, employer, and fit
- middle paragraph(s) connecting 1-2 specific examples to the role requirements
- closing paragraph restating interest and interview availability
Keep it concise, factual, and no longer than one page. Do not restate the whole resume.
6. Validate before delivery
Check that:
- no hardcoded personal info from unrelated candidates remains
- dates and headings are consistent
- bullets are role-targeted rather than generic
- low-signal items are removed or pushed down
- generated filenames are generic and safe
- resume and cover letter use matching typography
- exported PDF preserves layout and does not break bullets or spacing
- required contact info is present: email and phone
Layout rules
- Single column
- Black and white only
- Letter page size by default; A4 supported with
style.page_size - Section headers with strong hierarchy
- Balanced white space; avoid cramped default Word spacing
- Short, factual bullets
- Avoid self-evaluation phrases such as “责任心强” or “结果导向”
- Prefer evidence and scope over adjectives
- Contact line may include city, phone, email, LinkedIn, portfolio, or other relevant links
- Use section order by relevance; education may move down when experience is stronger
Safety rules
- Do not hardcode real candidate data into scripts
- Do not store secrets, API keys, tokens, or
.env files in the skill folder - Keep outputs outside the skill folder unless the user explicitly wants examples saved there
- Use
assets/example_profile.json only as a redacted example
Files
scripts/generate_resume.py: generic generatorrequirements.txt: Python dependenciesreferences/input-schema.md: input contractreferences/rewriting-guide.md: track-specific rewriting guidancereferences/harvard-hes-2024-notes.md: Harvard Extension School resume and cover letter checklistassets/example_profile.json: safe sample inputagents/openai.yaml: UI metadata