cv-builder
Skill0 starsChanged 8 months agoMITView on GitHub
Use this skill to build a tailored, ATS-friendly CV as a 1-page or 2-page PDF using Pandoc and WeasyPrint. Trigger whenever someone wants to: create or update a CV/resume targeting a specific job or company, convert their work history into a polished PDF, customize their CV for a specific role, or generate a 1-pager or 2-pager from existing source materials. Also trigger when the user says 'apply for a job', 'tailor my resume', 'create my CV for [company]', or 'update my CV' — even if they don't mention PDF format explicitly.
- Installs packages
5 other projects use a version of this.
Adopted by
Most recently taken up by
- talgurevich/cv-skilltheir own version, first seen Oct 15, 2026
- xiehuacheng/skillstheir own version, first seen Jul 26, 2026
- koralbonfil-maker/career-kittheir own version, first seen Jun 29, 2026
- marcellobarile/claude-skillstheir own version, first seen Jun 14, 2026
- claude-office-skills/skillstheir own version, first seen Jan 30, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- claude-office-skills/skills★ 433same name
- koralbonfil-maker/career-kit★ 1same name
- marcellobarile/claude-skills★ 1same name
- talgurevich/cv-skill★ 0same name
- xiehuacheng/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 7 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 50
Read all files in sources/.
- Very specific: line 68
Never invent data. Mark unknowns as "MISSING".
- Very specific: line 72
Read sources/job_description.md.
- Distinctive: line 88
Only Why This Role changes per application.
- Very specific: line 159
If page count is wrong, adjust CSS spacing — reduce margin-top on h2/h3 and margin-bottom on li first, before touching font size.
- Distinctive: line 165
No personal pronouns (I, my, me, we, our)
- Distinctive: line 166
No banned phrases: *passionate, leveraged, spearheaded, dynamic, synergy, results-driven, detail-oriented, thought leader, cutting-edge, …
- Distinctive: line 168
All bullets start with action verbs
- Distinctive: line 170
No photo, no date of birth, no nationality
- Distinctive: line 177
No banned phrases, no personal pronouns
- Distinctive: line 182
Only regenerate the Why This Role block.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CV Builder
Opinionated CV generation workflow: source materials → structured profile → job-tailored Markdown → PDF.
Dependencies
- Pandoc — pandoc.org/installing
- WeasyPrint —
pip install weasyprint(all platforms; see weasyprint docs for system dependencies)
IBM Plex Sans font — download from Google Fonts, place .ttf files in styles/fonts/:
IBMPlexSans-Regular.ttf, IBMPlexSans-Medium.ttf, IBMPlexSans-SemiBold.ttf, IBMPlexSans-Bold.ttf, IBMPlexSans-Italic.ttf
Project Structure
Scaffold once in the working directory:
sources/
cv_or_resume.* # existing CV (PDF, DOCX, or text)
linkedin_profile.pdf # LinkedIn export
notes.md # freeform notes — wins on any conflict
job_description.md # target JD, swapped per application
data/
profile.json # canonical profile (generated)
jd_analysis.json # per-application JD analysis (generated)
styles/
cv-onepage.css
cv-twopage.css
fonts/
scripts/
build_onepager.sh # see scripts/ in this skill
build_twopager.shWorkflow
First: ask the user — 1-pager, 2-pager, or both?
Step 1 — Ingest & Profile
Read all files in sources/. notes.md overrides everything else on conflicts.
Extract data/profile.json:
{
"personal": { "name": "", "title": "", "email": "", "linkedin": "", "location": "" },
"experience": [{
"company": "", "company_context": "", "title": "",
"period": { "start": "MMM YYYY", "end": "MMM YYYY or Present" },
"location": "", "bullets": []
}],
"education": [{ "degree": "", "institution": "", "year": "" }],
"certifications": [{ "name": "", "issuer": "", "year": "" }],
"languages": []
}Never invent data. Mark unknowns as "MISSING". Ask one clarifying question at a time.
Step 2 — JD Analysis
Read sources/job_description.md. Extract data/jd_analysis.json:
{
"company": "", "role_title": "",
"hard_skill_keywords": [],
"matching_candidate_strengths": [],
"missing_or_weak_matches": [],
"why_this_role_draft": ""
}why_this_role_draft: ≤400 chars, no pronouns, ties 2–3 strengths to JD keywords.
Step 3 — Generate cv-{COMPANY}.md
Only Why This Role changes per application. Everything else is constant.
Sections in order:
- Name + title + contact
- Value Proposition (5–6 bullets, no pronouns, include any notable awards/certifications)
- Why This Role (≤400 chars, inside
.why-this-rolediv) - Experience (reverse chronological)
- Competency Matrix (EXPERT / PROFICIENT / FAMILIAR)
- Education
- Certifications
- Languages
Experience block format:
### [Title] | [Company] | [Period] | [Location]
*[One-line context: sector, team size, scale — no client-per-bullet attribution]*
- Action verb + what + metric/result
*[Sub-section italic label if grouping needed]:*
- ...Competency Matrix format:
::: {.competency-matrix}
::: {.matrix-row}
::: {.matrix-label}
EXPERT
:::
::: {.matrix-items}
GCP (...), Kubernetes, Terraform, ...
:::
:::
... repeat for PROFICIENT, FAMILIAR ...
:::Why This Role box:
::: {.why-this-role}
**WHY THIS ROLE**
[text, ≤400 chars]
:::Step 4 — Approval Gate ⛔
Stop. Show the Markdown. Wait for explicit approval before building any PDF.
Iterate on content until approved. Do not run the build scripts without approval.
Step 5 — Build PDF
Generate CSS files (see references/css.md) and build scripts (see scripts/), then run:
bash scripts/build_onepager.sh {COMPANY} # for 1-pager
bash scripts/build_twopager.sh {COMPANY} # for 2-pagerCheck page count:
# macOS
mdls -name kMDItemNumberOfPages cv-onepager-{COMPANY}-latest.pdf
# Linux / Windows (requires poppler-utils)
pdfinfo cv-onepager-{COMPANY}-latest.pdf | grep PagesIf page count is wrong, adjust CSS spacing — reduce margin-top on h2/h3 and margin-bottom on li first, before touching font size. Hard floor: 8.5pt for 1-pager, 9pt for 2-pager.
Rules
- No personal pronouns (I, my, me, we, our)
- No banned phrases: passionate, leveraged, spearheaded, dynamic, synergy, results-driven, detail-oriented, thought leader, cutting-edge, streamlined, robust, innovative, transformative, proactive
- Why This Role ≤400 characters (count exactly)
- All bullets start with action verbs
- Company context line on every detailed role
- No photo, no date of birth, no nationality
notes.mdalways wins on conflicts
ATS Check (before PDF)
- ≥70% of top-10 JD hard skills in CV
- Why This Role ≤400 chars
- No banned phrases, no personal pronouns
- All bullets start with action verbs
Per-application update
Only regenerate the Why This Role block. Re-run ATS check. Rebuild PDF.
Reference Files
references/css.md— Full CSS for both layouts with tuned values
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

