agentleFS
berkaybuharaliberkaybuharali/cv-builder/SKILL.md

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

  • Other versions5 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 5

    1. claude-office-skills/skills★ 433same name
    2. koralbonfil-maker/career-kit★ 1same name
    3. marcellobarile/claude-skills★ 1same name
    4. talgurevich/cv-skill★ 0same name
    5. 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
  1. Very specific:

    Read all files in sources/.

    line 50
  2. Very specific:

    Never invent data. Mark unknowns as "MISSING".

    line 68
  3. Very specific:

    Read sources/job_description.md.

    line 72
  4. Distinctive:

    Only Why This Role changes per application.

    line 88
  5. Very specific:

    If page count is wrong, adjust CSS spacing — reduce margin-top on h2/h3 and margin-bottom on li first, before touching font size.

    line 159
  6. Distinctive:

    No personal pronouns (I, my, me, we, our)

    line 165
  7. Distinctive:

    No banned phrases: *passionate, leveraged, spearheaded, dynamic, synergy, results-driven, detail-oriented, thought leader, cutting-edge, …

    line 166
  8. Distinctive:

    All bullets start with action verbs

    line 168
  9. Distinctive:

    No photo, no date of birth, no nationality

    line 170
  10. Distinctive:

    No banned phrases, no personal pronouns

    line 177
  11. Distinctive:

    Only regenerate the Why This Role block.

    line 182

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

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.