agentsclimarketplace

Cv builder

Skill berkaybuharali/cv-builder

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.From its SKILL.md

Install
npx -y skills add berkaybuharali/cv-builder

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

5.5 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it

CV Builder

Opinionated CV generation workflow: source materials → structured profile → job-tailored Markdown → PDF.

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.sh

Workflow

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:

  1. Name + title + contact
  2. Value Proposition (5–6 bullets, no pronouns, include any notable awards/certifications)
  3. Why This Role (≤400 chars, inside .why-this-role div)
  4. Experience (reverse chronological)
  5. Competency Matrix (EXPERT / PROFICIENT / FAMILIAR)
  6. Education
  7. Certifications
  8. 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-pager

Check page count:

# macOS
mdls -name kMDItemNumberOfPages cv-onepager-{COMPANY}-latest.pdf
# Linux / Windows (requires poppler-utils)
pdfinfo cv-onepager-{COMPANY}-latest.pdf | grep Pages

If 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.md always 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

What ships with it: 6 files

13.2 KB alongside SKILL.md, 2 of them executable

references/

scripts/

Gives 0 of the 12 instructions most hr recruiting skills give in ~1.3k tokens

Counted across 356 of the 357 authors here whose files we hold, read 2026-08-07

  • Quantify achievements with specific metricsin 14 of 356, across 6 files
  • Keep the resume under two pagesin 14 of 356, across 6 files
  • Request the full job description if not providedin 12 of 356, across 4 files
  • Extract keywords and prioritize job requirementsin 12 of 356, across 4 files
  • Stop and ask for clarification if required inputs are missingin 12 of 356, across 5 files
  • Map candidate experience to job requirementsin 11 of 356, across 3 files
  • Ask if the user wants adjustmentsin 11 of 356, across 3 files
  • Provide strengths and gap analysis after the resumein 10 of 356, across 2 files
  • Request candidate background details if not providedin 10 of 356, across 2 files
  • Format experience bullets as action verb plus resultin 10 of 356, across 2 files
  • Ask for missing inputs before startingin 10 of 356, across 9 files
  • Use exact job description terminologyin 9 of 356, across 1 file

Said here and by no other author read

  • ask user for one-pager two-pager or both
  • use notes.md to override conflicting data
  • keep why this role under 400 characters
  • stop and show markdown for explicit approval
  • do not build pdf without explicit approval
  • check pdf page count after generation

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.