cv-builder

$npx mdskill add TerminalSkills/skills/cv-builder

Generates professional CVs from YAML data using rendercv templates

  • Solves the problem of formatting structured career data into polished resumes
  • Uses rendercv library with support for multiple CV templates and PDF output
  • Processes YAML input containing user experience, education, and professional details
  • Delivers formatted PDF resumes ready for job applications or professional use
SKILL.md
.github/skills/cv-builderView on GitHub ↗
---
name: cv-builder
description: >-
  Generate professional CVs and resumes from structured YAML data using
  rendercv. Use when a user asks to create a CV, build a resume, generate a
  PDF resume, format a curriculum vitae, make a professional CV from their
  experience, or convert career data into a polished resume document.
  Supports multiple templates and PDF output.
license: Apache-2.0
compatibility: "Requires Python 3.10+ with rendercv installed (pip install rendercv)"
metadata:
  author: terminal-skills
  version: "1.0.0"
  category: business
  tags: ["cv", "resume", "pdf", "career", "rendercv"]
  use-cases:
    - "Generate a polished PDF resume from structured career data"
    - "Switch between multiple professional CV templates"
    - "Maintain a version-controlled resume in YAML format"
  agents: ["claude-code", "openai-codex", "gemini-cli", "cursor"]
---

# CV Builder

## Overview

Generate professional, well-formatted CVs and resumes from structured YAML input using the rendercv library. Define your experience, education, skills, and projects in a YAML file and produce publication-ready PDF output with consistent formatting. Choose from multiple built-in templates or customize your own.

## Instructions

When a user asks you to create or update a CV/resume, follow these steps:

### Step 1: Gather career information

Ask the user for or extract the following details:
- **Personal info**: Full name, email, phone, location, LinkedIn/GitHub URLs
- **Summary**: A brief professional summary or objective (2-3 sentences)
- **Experience**: Job titles, companies, dates, bullet-point accomplishments
- **Education**: Degrees, institutions, graduation dates, GPA (optional)
- **Skills**: Technical skills, languages, tools, frameworks
- **Projects** (optional): Notable projects with descriptions
- **Certifications** (optional): Professional certifications with dates

### Step 2: Create the YAML input file

Structure the data into a rendercv-compatible YAML file:

```yaml
cv:
  name: Jane Smith
  location: San Francisco, CA
  email: jane.smith@email.com
  phone: "+1-555-123-4567"
  website: https://janesmith.dev
  social_networks:
    - network: LinkedIn
      username: janesmith
    - network: GitHub
      username: janesmith

  sections:
    summary:
      - >-
        Senior software engineer with 8 years of experience building
        scalable web applications. Expertise in Python, TypeScript, and
        cloud infrastructure.

    experience:
      - company: Acme Corp
        position: Senior Software Engineer
        location: San Francisco, CA
        start_date: 2021-03
        end_date: present
        highlights:
          - "Led migration of monolith to microservices, reducing deploy time by 70%"
          - "Mentored team of 4 junior engineers through code reviews and pairing"
          - "Designed real-time data pipeline processing 2M events/day"

      - company: StartupXYZ
        position: Software Engineer
        location: Remote
        start_date: 2018-06
        end_date: 2021-02
        highlights:
          - "Built REST API serving 50K daily active users with 99.9% uptime"
          - "Implemented CI/CD pipeline reducing release cycle from 2 weeks to 1 day"

    education:
      - institution: University of California, Berkeley
        area: Computer Science
        degree: BS
        start_date: 2014-09
        end_date: 2018-05
        highlights:
          - "GPA: 3.8/4.0"

    skills:
      - label: Languages
        details: Python, TypeScript, Go, SQL
      - label: Frameworks
        details: React, FastAPI, Django, Next.js
      - label: Infrastructure
        details: AWS, Docker, Kubernetes, Terraform

design:
  theme: classic
  font_size: 10pt
  page_size: letterpaper
  margins:
    page:
      top: 2cm
      bottom: 2cm
      left: 2cm
      right: 2cm
```

Save this file as `cv.yaml` in the working directory.

### Step 3: Choose a template theme

Available rendercv themes:
- **classic** - Traditional single-column layout, best for corporate roles
- **sb2nov** - Modern two-column layout popular in tech
- **moderncv** - Academic-style CV with colored accents
- **engineeringresumes** - Clean, ATS-friendly format optimized for engineering

Set the theme in the `design.theme` field of the YAML file.

### Step 4: Generate the PDF

```bash
rendercv render cv.yaml
```

This creates a `rendercv_output/` directory containing:
- `cv.pdf` - The final PDF resume
- `cv.tex` - LaTeX source (for manual adjustments)
- `cv.md` - Markdown version
- `cv.html` - HTML version

### Step 5: Validate and iterate

Review the generated PDF with the user:
- Check for formatting issues or text overflow
- Verify dates and details are correct
- Adjust margins, font size, or theme if needed
- Re-run `rendercv render cv.yaml` after changes

## Examples

### Example 1: Create a new resume from scratch

**User request:** "Help me create a professional resume. I'm a data scientist with 5 years of experience."

**Steps:**
1. Ask the user for their full career details
2. Create `cv.yaml` with their information using the `sb2nov` theme
3. Run `rendercv render cv.yaml`
4. Present the PDF output path and offer to adjust formatting

**Output:**
```
Created cv.yaml with your career data
Generated PDF: rendercv_output/cv.pdf
Also available: cv.tex, cv.md, cv.html

The resume uses the sb2nov theme (modern two-column layout).
Would you like to adjust the template, font size, or content?
```

### Example 2: Update an existing CV with a new job

**User request:** "Add my new position at Google to my existing CV"

**Steps:**
1. Read the existing `cv.yaml` file
2. Add the new experience entry at the top of the experience section
3. Re-run `rendercv render cv.yaml`
4. Confirm the update with the user

### Example 3: Switch template theme

**User request:** "Change my resume to a more traditional format for a finance role"

**Steps:**
1. Read the existing `cv.yaml`
2. Change `design.theme` from `sb2nov` to `classic`
3. Optionally adjust font size to `11pt` for readability
4. Re-run `rendercv render cv.yaml`

## Guidelines

- Always use quantifiable achievements in bullet points (numbers, percentages, metrics).
- Keep the resume to 1 page for candidates with under 10 years of experience; 2 pages maximum for senior professionals.
- Use action verbs to start each bullet point (Led, Built, Designed, Implemented, Reduced).
- Order experience entries reverse-chronologically (most recent first).
- Tailor the skills section to match the target role when the user specifies one.
- Validate the YAML syntax before running rendercv to catch formatting errors early.
- If rendercv is not installed, guide the user: `pip install rendercv`.
- Store the YAML file in version control so the user can track resume changes over time.
- Avoid including personal photos, age, or marital status unless the user explicitly requests it and it is customary for their region.
More from TerminalSkills/skills