Generate, adapt, and update CVs from structured data stored in cv_data.json. Triggers: "cv" | "generate cv" | "generate my cv" | "adapt cv" | "update cv" | "tailor cv" | "make my resume" | "update my resume" | "write my cv" | "adapt my resume for" | "tailor my cv for".
Scanned 9/23/2026
Install to Claude Code
npx -y skills add Roxabi/roxabi-plugins --skill cv --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Cv?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/roxabi-roxabi-plugins)More formats (shields.io, HTML) on the badges page.
---
name: cv
description: 'Generate, adapt, and update CVs from structured data stored in cv_data.json. Triggers: "cv" | "generate cv" | "generate my cv" | "adapt cv" | "update cv" | "tailor cv" | "make my resume" | "update my resume" | "write my cv" | "adapt my resume for" | "tailor my cv for".'
version: 0.1.0
allowed-tools: Read, Edit, Write, Bash, Glob, Grep
---
# CV
Generate professional CVs from structured data. Adapt them for specific job postings. Update the master data file.
Let:
V := ~/.roxabi-vault/cv/ — plugin data root
D := V/cv_data.json — master CV data
G := V/generated/ — generated CVs
A := V/adapted/ — job-adapted CVs
T := <plugin>/templates/ — Jinja2 templates
S := <plugin>/scripts/generate_cv.py — generation script
C := ~/.roxabi-vault/config/cv.json — plugin config
## Self-Check
1. Verify D:
```bash
test -f ~/.roxabi-vault/cv/cv_data.json && echo "OK" || echo "MISSING"
```
¬D → "No cv_data.json found. Run /cv-init to set up the CV plugin." Halt.
2. Verify Jinja2:
```bash
python3 -c "import jinja2" 2>/dev/null && echo "OK" || echo "MISSING"
```
¬jinja2 → "Jinja2 is required. Install with: pip install jinja2". Halt.
## Phase 1 — Determine Intent
Parse $ARGUMENTS:
| Intent | Signal | Action |
|--------|--------|--------|
| **Generate** | "generate", "create", "build", no args | Generate CV from D |
| **Adapt** | "adapt", "tailor", "for [job]", URL or job description | Adapt CV for role |
| **Update** | "update", "add", "change", "edit" | Modify D |
Ambiguous → present choice **Generate** | **Adapt** | **Update**
## Phase 2 — Generate
1. Read D. Determine format (md/html/all) and language (fr/en/all) from args or C. Default: C values.
2. Template: default `cv_template`; use `cv_template_rich` if D has `experiences` key with `title`/`dates`/`sections` fields, or user requests it.
3. Run:
```bash
python3 <plugin>/scripts/generate_cv.py --data ~/.roxabi-vault/cv/cv_data.json --lang <lang> --format <format> [--template cv_template_rich]
```
`--lang all` → one file per language (`cv_fr.md`, `cv_en.md`); `--lang fr` → `cv.md` (no suffix). `--format all` → md + html. Both `experience`/`experiences` keys accepted (aliased). Report output path(s).
## Phase 3 — Adapt
1. Read D. Gather job posting from $ARGUMENTS (URL or text); → ask userif missing: "Provide the job posting URL or paste the job description."
2. Analyze posting: extract requirements, skills, keywords.
3. Adapt CV: reorder experience → relevant roles; emphasize matching skills; adjust summary → target role. ¬fabricate experience.
4. Write adapted data + generate (tempfile per `${CLAUDE_PLUGIN_ROOT}/../shared/references/tempfile-convention.md`):
```bash
COMPANY_SAFE=$(echo "$COMPANY" | tr -c '[:alnum:]-' '-' | head -c 40)
TMPDIR=$(mktemp -d -t "cv-adapt-${COMPANY_SAFE}-XXXXXX")
trap 'rm -rf "$TMPDIR"' EXIT
ADAPTED="$TMPDIR/adapted.json"
# write adapted JSON → "$ADAPTED"
python3 <plugin>/scripts/generate_cv.py --data "$ADAPTED" --output ~/.roxabi-vault/cv/adapted/cv_<company>_<date>.<format> --format <format>
```
5. Report changes + output path.
## Phase 4 — Update
Read D → present structure → present choice **Experience** | **Skills** | **Education** | **Personal info** → apply changes → validate JSON.
## Vault Integration (Optional)
```bash
test -f ~/.roxabi-vault/vault.db && echo "VAULT_AVAILABLE" || echo "NO_VAULT"
```
VAULT_AVAILABLE → after generate/adapt: index output file with `category=cv` + type tag.
$ARGUMENTS
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!