HR Resume Screening
Purpose
Rank resumes against a job description with an explainable 100-point model.
Use this skill for first-pass screening: read the JD, extract or read resume text, score candidates, and produce a ranked interview recommendation list.
Inputs
Accept:
- A JD pasted in the conversation.
- A JD file path, preferably
.mdor.txt. - One PDF resume.
- One folder of PDF resumes.
- Multiple folders of PDF resumes.
- Previously extracted
.txtor.jsonresume files.
If the JD or resume source is missing, ask for it.
Preparation Gate
Preparation-only requests still use this skill. Treat "do not start screening" as a workflow gate, not as a request to bypass the skill.
For a preparation-only request:
- Ask for the JD, resume file or folder paths, and any optional output preferences.
- Explain the accepted input formats when useful.
- Do not read resumes, run extraction, score candidates, or write screening results until the user asks to begin.
- Defer the optional LLM Wiki preflight until screening begins unless the user explicitly asks to initialize or check it.
Shared Resources
Use HR Agent Copilot shared files:
../scripts/extract_resumes.py../references/scoring-rubric.md../references/report-template.md
If the skill is installed in a flattened environment, locate equivalent scripts/ and references/ paths near the skill root.
Optional LLM Wiki Augmentation
This skill declares its memory contract in scp.yml. Before the main business
workflow, read ../references/llm-wiki-integration.md, run the
resolve-config preflight, and apply the declared query flow when HR memory is
enabled. If any runtime step fails, follow the shared fallback contract and
complete the original workflow.
Workflow
- Read the JD and identify:
- Role title and level.
- Must-have requirements.
- Nice-to-have requirements.
- Business domain.
- Deal breakers.
- Hidden priorities implied by the user's wording.
- Read or extract resumes.
- If resumes are PDFs and text is not already available, run
scripts/extract_resumes.py. - Use recursive folder scanning when the user provides folders.
- If resumes are PDFs and text is not already available, run
- Extract candidate facts:
- Name.
- Years of experience.
- Age, if present and job-relevant only when the user explicitly asks.
- Education level, school, and major.
- Company history.
- Each job segment duration.
- Recent job duration.
- Core technologies.
- Business domain experience.
- Project role and responsibility depth.
- Risk signals and missing information.
- Score candidates with
references/scoring-rubric.md. - Produce a ranking report using
references/report-template.md. - Separate resume facts, reasoned judgments, and interview verification points.
PDF Extraction
Example:
python scripts/extract_resumes.py --input "D:/workspace/ai-workspace/jd" --output output/hr-resume-extracts
Multiple folders:
python scripts/extract_resumes.py --input "D:/resumes/backend" "D:/resumes/ai" --output output/hr-resume-extracts
If pypdf is unavailable:
pip install -r scripts/requirements.txt
Output
Always include:
- Candidate ranking table.
- Score breakdown table.
- Recommended interview list.
- Non-prioritized candidates.
- Key risk and verification points.
- Notes about missing or ambiguous information.
Scoring Discipline
Do not score only by keyword matching.
Reward:
- Direct role/domain match.
- Clear project ownership.
- Production system experience.
- Relevant architecture and problem-solving depth.
Penalize:
- Vague claims.
- Keyword-only experience.
- unclear project ownership.
- unexplained frequent short tenures.
The final score reflects fit for this JD, not general candidate ability.