From resume-generator
Use when the user asks to generate, create, or tailor a resume or CV, when they mention a job application, job posting, or want to update their resume for a specific role, or when they ask to set up or modify a knowledge.yaml in the current working directory.
How this skill is triggered — by the user, by Claude, or both
Slash command
/resume-generator:resume-generatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Standalone skill that generates tailored LaTeX resumes (and PDFs) from a `knowledge.yaml` file in the user's current working directory. All templates, the blank knowledge template, and the procedural sub-docs live inside the skill folder — no repo coupling, works in any directory.
assets/knowledge.template.yamlgeneration.mdonboarding.mdtemplates/1/res.clstemplates/1/template.textemplates/2/resume.clstemplates/2/template.textemplates/3/Fonts/EBGaramond-Bold.ttftemplates/3/Fonts/EBGaramond-BoldItalic.ttftemplates/3/Fonts/EBGaramond-Italic.ttftemplates/3/Fonts/EBGaramond-Licensetemplates/3/Fonts/EBGaramond-Regular.ttftemplates/3/Fonts/EBGaramond-SC.ttftemplates/3/Fonts/FontAwesome.mdtemplates/3/Fonts/FontAwesome.otftemplates/3/Fonts/Freebooterscript-license.txttemplates/3/Fonts/Libertinus-OFL-license.txttemplates/3/Fonts/LibertinusSans-Bold.otftemplates/3/Fonts/LibertinusSans-Italic.otftemplates/3/Fonts/LibertinusSans-Regular.otfStandalone skill that generates tailored LaTeX resumes (and PDFs) from a knowledge.yaml file in the user's current working directory. All templates, the blank knowledge template, and the procedural sub-docs live inside the skill folder — no repo coupling, works in any directory.
<SKILL_ROOT> below = the directory containing this file (resolve at runtime — exact path depends on where the host CLI installs skills).
<cwd> = the user's current working directory (where the resume will be generated).
<SKILL_ROOT>/
├── SKILL.md # this file (entry, gate, dispatch)
├── onboarding.md # loaded when knowledge.yaml is missing or mid-fill
├── generation.md # loaded when knowledge.yaml passes the gate
├── assets/
│ └── knowledge.template.yaml # blank template with <PLACEHOLDER> sentinels
├── templates/ # all six LaTeX templates, source-only
│ ├── 1/ res.cls + template.tex # Classic Academic CV (pdflatex)
│ ├── 2/ resume.cls + template.tex # Modern Professional (pdflatex, default)
│ ├── 3/ FreemanCV.cls + Fonts/ + template.tex # Freeman CV (xelatex)
│ ├── 4/ moderncv.cls + *.sty + pictures/ + template.tex # ModernCV (pdflatex)
│ ├── 5/ structure.tex + fonts/ + template.tex # Wilson Resume (xelatex)
│ └── 6/ structure.tex + template.tex # Cies Resume (pdflatex)
├── tests/
│ ├── compile-all.sh # sanity check that every template compiles
│ └── preflight.sh # cross-OS LaTeX env check + auto-installer (used by generation.md Step 1.5)
└── docs/
└── *.md # design notes (read-only history)
digraph entry {
"Skill invoked" -> "Read cwd";
"Read cwd" -> "User asked to bootstrap from dir(s)?";
"User asked to bootstrap from dir(s)?" -> "Read onboarding.md\n(Branch 1c)" [label="yes"];
"User asked to bootstrap from dir(s)?" -> "knowledge.yaml exists?" [label="no"];
"knowledge.yaml exists?" -> "Read onboarding.md" [label="no"];
"knowledge.yaml exists?" -> "Fill-quality check" [label="yes"];
"Fill-quality check" -> "Required fields filled?";
"Required fields filled?" -> "Read onboarding.md\n(mid-fill branch)" [label="no"];
"Required fields filled?" -> "Job posting given?" [label="yes"];
"Job posting given?" -> "Role-aware gap scan" [label="yes"];
"Job posting given?" -> "Read generation.md" [label="no"];
"Role-aware gap scan" -> "Critical gaps?";
"Critical gaps?" -> "Ask user: fill or proceed?" [label="yes"];
"Critical gaps?" -> "Read generation.md" [label="no"];
"Ask user: fill or proceed?" -> "Read onboarding.md\n(targeted-fill branch)" [label="fill"];
"Ask user: fill or proceed?" -> "Read generation.md\n(carry warnings)" [label="proceed"];
}
knowledge.yamlIf absent → Read <SKILL_ROOT>/onboarding.md and follow it. Do not proceed.
The user may also explicitly ask to bootstrap from a directory (or directories) of their work — phrases like "build a knowledge.yaml from ~/work/projects" or "go through this folder and draft my entries". When this happens (whether knowledge.yaml exists yet or not), route to onboarding Branch 1c which dispatches a sub-agent per directory to walk the contents, draft projects[] / experience[] entries, and record evidence: pointers for future deep-dives.
Read <cwd>/knowledge.yaml. Required fields must be present, non-empty, and free of <PLACEHOLDER> sentinels (regex: <[A-Z_]+>):
nameemaileducationexperience or projectsIf any required field fails → Read <SKILL_ROOT>/onboarding.md and follow it (mid-fill branch). Do not proceed.
If the user provided a job posting:
subagent_type: general-purposemodel: haikudescription: Analyse job postingprompt: include the URL or file path; ask the agent to use WebFetch (URL) or Read (file) to retrieve the source, then return only: required skills, preferred qualifications, job title, company, domain, role classification (academic/industry/creative/european/detailed/minimal) with confidence (low/med/high).Cross-check the analysis against knowledge.yaml:
skills.*?If gaps exist:
generation.md.When the gate is fully clear → Read <SKILL_ROOT>/generation.md and follow it. Pass forward: the yaml content, the job-posting analysis (if any), the user's template choice (if explicit), any soft-warning gap list.
cwd is that repo, OR the path appears under a evidence: field in knowledge.yaml (those are explicit user-granted read pointers).<cwd>/outputs/<role-slug>/, never inside <SKILL_ROOT>..log, dir walks for bootstrap or deep-dive). For pasted text or content the main agent already holds, work inline to avoid wasting tokens on re-emission.general-purpose, Explore). No plugin agent dependencies.evidence: entries are READ-ONLY pointers. Deep-dive sub-agents may read them; nothing in this skill ever writes to those locations.| Mistake | Fix |
|---|---|
Reading knowledge.yaml from skill folder | Always read from <cwd>, never from <SKILL_ROOT> |
| Generating into the skill folder | Outputs always go to <cwd>/outputs/<slug>/ |
| Skipping the gate "because the user is in a hurry" | Gate failures cause broken resumes — onboarding first, always |
| Dispatching a sub-agent to analyse pasted-text job posting | Wastes tokens — main already has the text, analyse inline |
| Re-fetching a job posting URL once during the gate and again during generation | Reuse the gate-time analysis |
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub gitpersonali/resume-generator --plugin resume-generator