From resume-evaluator
Evaluate a folder of PDF resumes against job criteria and generate an interactive HTML comparison report. Use when a user wants to screen, compare, or rank candidates from a folder of resumes. Triggers on phrases like "evaluate resumes", "screen candidates", "compare resumes", or "analyze resumes in [folder]".
How this skill is triggered — by the user, by Claude, or both
Slash command
/resume-evaluator:resume-evaluatorThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Evaluate PDF resumes against job criteria and generate an interactive HTML comparison report with color-coded outcomes per requirement.
Evaluate PDF resumes against job criteria and generate an interactive HTML comparison report with color-coded outcomes per requirement.
Ask the user for the folder path if not already provided. Use Glob to find all *.pdf files in that folder:
Glob("*.pdf", target_directory="<folder>")
Report how many PDFs were found. If none, stop and tell the user.
Determine which input mode the user is using:
Mode A — Job description pasted: The user provided a raw job description. Follow the rules in references/criteria-extraction.md to extract a structured list of criteria. Present the extracted criteria to the user as a numbered list in this format:
1. [mandatory] <requirement text>
2. [preferred] <requirement text>
3. [neutral] <requirement text>
Mode B — Criteria listed directly: The user listed requirements. Normalize each into the same format, assigning mandatory / preferred / neutral based on their wording (must/required → mandatory; nice to have/preferred → preferred; soft skills, unverifiable from resume → neutral).
Assign each criterion a short stable ID: r1, r2, r3, etc.
Ask the user to confirm, add, remove, or edit the criteria before proceeding. Do not continue until explicitly confirmed.
For each PDF file found in Step 1:
Read tool.outcome: "yes", "partial", or "no"analysis: 1–3 sentence explanation citing specific resume evidence.WebSearch or WebFetch for a specific criterion when the resume does not contain enough information to evaluate it and external verification would materially change the outcome (e.g., verifying a degree program's curriculum, looking up a company's known tech stack, finding a public LinkedIn profile). Do not web-search by default.Keep a running JSON structure for each evaluated candidate:
{
"name": "Jane Smith",
"email": "[email protected]",
"phone": "+1 555-0100",
"linkedin": "https://linkedin.com/in/janesmith",
"file": "jane-smith.pdf",
"requirements": {
"r1": { "outcome": "yes", "analysis": "Candidate has 8 years of Node.js experience across 3 roles." },
"r2": { "outcome": "partial", "analysis": "Mentions MySQL but no NoSQL databases are listed." },
"r3": { "outcome": "no", "analysis": "No mention of TypeORM in the resume." }
}
}
After processing all resumes, create the output directory and write the aggregated data:
mkdir -p ./.resume-eval
Write a JSON file ./.resume-eval/evaluations.json with this structure:
{
"criteria": [
{ "id": "r1", "text": "5+ years of Node.js experience", "type": "mandatory" },
{ "id": "r2", "text": "Experience with NoSQL databases", "type": "preferred" }
],
"candidates": [
{ ...candidate object from Step 3... }
]
}
Run the report generator:
python3 ${CLAUDE_SKILL_DIR}/scripts/generate_report.py ./.resume-eval/evaluations.json ./resume-report.html
Report the absolute path of the generated file to the user. The script opens it automatically in the default browser.
partial, not yes.no unless partial evidence exists.analysis concise and factual — cite role titles, company names, years, or specific technologies as anchors.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 brainner-ai/skills --plugin resume-evaluator