CV Generator

VerifiedCaution

Generates your CV in HTML and PDF, tailored to a specific job. Uses your full profile and work history.

Sby Skills Guide Bot
ProductivityIntermediate
7/22/2026
Claude Code
#cv-generation#resume-tailoring#pdf-export#headless-chrome#versioned-history

Recommended for

Automated summary

Regenerates a CV as HTML and then PDF from a pre-filled profile, either tailoring it to a specific job posting or refreshing the base version.

Strengths

  • Keeps a dated archive of HTML versions (`YYYY-MM-DD_<context>.html`) before every edit, making rollbacks straightforward
  • Rewrites the summary, reorders skills, and re-emphasizes bullets around the job description's keywords without inventing metrics or facts
  • Battle-tested PDF pipeline that works around Chrome headless blocking `file://` URLs by serving the page from a local HTTP server
  • Dated, sequence-numbered output naming (`date_NN_Name.pdf`) keeps exports sortable and traceable

Limitations

  • Tightly macOS-bound: hardcoded Chrome path, Preview launch, `~/Documents` and `~/Desktop` folders
  • The "Who You Are" block ships with placeholders that must be filled in manually before it is useful
  • Only reorders and rewords content already in the latest HTML, so output quality depends entirely on the existing source CV
  • No ATS compatibility or layout validation beyond a rough PDF size check (~150KB+)
When to use it

Use it when you want to refresh your CV or tailor it to a specific company or vacancy and get a dated PDF ready to send.

When not to use it

Avoid it on non-macOS machines, or when you have no existing source HTML CV in the skill's history to build from.

Security analysis

Caution
Quality score80/100

The skill uses powerful tools (bash, a local HTTP server, Chrome headless) but for a coherent, legitimate purpose: rendering an HTML CV to PDF locally. There is no obfuscation, no curl|sh, no secret exfiltration, no destructive deletion, and it explicitly says not to use file:// URLs — it never sends data outbound. Concerns are limited to the broad `pkill`, the default-all-interfaces HTTP server exposing /tmp briefly, and general local-file writes. Hence 'caution' rather than 'safe' or 'risky'.

Findings
  • •Starts `python3 -m http.server 9292` from /tmp, which by default binds to 0.0.0.0 and exposes /tmp contents on the local network while running (ends only via `kill %1`).
  • •`pkill -f "http.server"` is overly broad and could kill unrelated Python HTTP servers the user is running.
  • •Launches Chrome headless and writes files to /tmp, ~/Documents/CVs, and ~/Desktop (local filesystem writes, expected but broad).
  • •Invokes `open -a Preview` on generated PDFs.
How this analysis is made

Examples

Tailor to a vacancy
Adapt my CV for this backend role at Stripe — here's the job description: [paste JD]. Emphasize TypeScript, Node.js and payments work.
Refresh the base CV
Regenerate my base CV: I just wrapped up a contract at Acme as a senior backend engineer and want it reflected.
Company-specific variant
Make a version of my CV targeted at Nango, backend focus, and save it with the right history and PDF names.

name: job:cv description: Regenerate your CV. Knows your full profile, stack, and experience. Adapts the CV for a specific vacancy or context if provided, or refreshes the base version. Invoke when you ask to update, adapt, or regenerate the CV. argument-hint: "[vacancy description or company name, optional]" user-invocable: true disable-model-invocation: false allowed-tools: Bash(cat *), Bash(open *), Bash(cp *), Bash(ls *), Bash("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" *)

CV Generator

Who You Are

<!-- Fill in your profile. This is used to adapt bullets and summary for each role. -->

Your Name — Senior [Role], [N]+ years, based in [City, Country] (UTC[offset]).

Core stack: [e.g. TypeScript, Node.js, NestJS, Fastify, React, Next.js, Prisma, PostgreSQL] AI/agents: [e.g. Mastra, OpenAI, RAG pipelines, pgvector, LangChain — if applicable] Mobile/platforms: [e.g. React Native, Telegram Mini Apps — if applicable] DevOps: [e.g. Docker, GitHub Actions, AWS] English: [level]. Location: [city], remote only.

Current role: [Company] ([Start]–present) — [brief product description]. Stack: [tech stack].

Previous roles:

  • [Company] ([dates]): [one-line description]
  • [Company] ([dates]): [one-line description]
  • [Company] ([dates]): [one-line description]

CV Files

  • HTML source (canonical): ~/.claude/skills/job-cv/history/ — always use the latest *.html in history as source of truth.
  • Working copy: /tmp/cv.html — write here before generating PDF
  • PDF output: ~/Documents/CVs/YYYY-MM-DD_NN_YourName.pdf — date + sequence number for today (01, 02…), sortable
  • History archive: ~/.claude/skills/job-cv/history/

History naming convention

YYYY-MM-DD_<context>.html — where <context> is either base (no target company) or a slug of the company/role (e.g. stripe, nango-backend).

ls -lt ~/.claude/skills/job-cv/history/

How to regenerate PDF

⚠️ Do NOT use file:// URLs with Chrome headless — Chrome sandbox blocks local file access and silently renders an error page (~23KB PDF).

Correct workflow:

  1. Write HTML to /tmp/cv.html using the Write tool
  2. Serve via Python HTTP server from /tmp
  3. Chrome headless fetches from localhost
  4. Copy PDF to output folder
pkill -f "http.server" 2>/dev/null; sleep 1
cd /tmp && python3 -m http.server 9292 &
sleep 1
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --headless=new --disable-gpu \
  --no-margins --no-pdf-header-footer \
  --print-to-pdf="/tmp/cv_out.pdf" \
  "http://localhost:9292/cv.html" 2>&1 | tail -3
kill %1 2>/dev/null
DATE=$(date +%Y-%m-%d)
N=$(ls ~/Documents/CVs/${DATE}_*.pdf 2>/dev/null | wc -l | tr -d ' ')
N=$(printf "%02d" $((N + 1)))
OUTFILE=~/Documents/CVs/${DATE}_${N}_YourName.pdf
cp /tmp/cv_out.pdf "$OUTFILE"
cp /tmp/cv_out.pdf ~/Desktop/${DATE}_${N}_YourName.pdf
open -a Preview "$OUTFILE"

A valid PDF is ~150KB+. If output is ~23KB it's still an error page.

Instructions

  1. Read the latest HTML from history: ls -lt ~/.claude/skills/job-cv/history/ → read the newest file.
  2. Archive before edits: save current HTML to history as YYYY-MM-DD_<context>.html using the Write tool.
  3. Edit the HTML (Write tool to /tmp/cv.html):
    • Summary: rewrite to match the company's vibe and keywords from their JD
    • Skills section: surface the most relevant technologies first, add keywords from JD naturally
    • Bullets: keep all real content, only reorder emphasis — never invent metrics or facts
  4. If no arguments — user wants to update/refresh the base CV. Ask what changed.
  5. Never fabricate metrics or details. Only use information confirmed by the user or verifiable from the project.
  6. After editing, regenerate the PDF using the workflow above and open it in Preview.
  7. Show the user what changed (diff summary, not the full HTML).

CV style rules

  • Bold only outcomes and scale (e.g. 1M+ MAU, all interns promoted) — not tech keywords
  • No build tooling in bullets (Turborepo, pnpm workspaces — too narrow)
  • Keep real tech depth: PostgreSQL, Redis, SSE, Prisma ORM, Supabase — these are real experience worth keeping
  • No LLM model version strings in CV (write "OpenAI" or "LLMs", never "GPT-4" / "GPT-4o")
  • "Maintained and extended" not "Shipped" if you inherited a running service

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/cv-generator-mrwakbj0/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/cv-generator-mrwakbj0' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/cv-generator-mrwakbj0/download' --output '.skill-downloads/cv-generator-mrwakbj0/SKILL.md.part' && mv '.skill-downloads/cv-generator-mrwakbj0/SKILL.md.part' '.skill-downloads/cv-generator-mrwakbj0/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Bash(cat *), Bash(open *), Bash(cp *), Bash(ls *), Bash("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" *)

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/cv-generator-mrwakbj0/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills