Ats scanner
Simulates an enterprise ATS system (Workday / SAP SuccessFactors) to analyse a resume against a job description. Scores the resume 0-100, lists missing keywords, formatting issues, and section weaknesses, runs a 10-second recruiter skim test, then rewrites the summary to pass ATS filters. Trigger when the user says "ATS", "scan my resume", "check my CV against the job", "will my resume pass", "score my CV", "keyword analysis", or pastes a job description alongside a resume/CV. Also trigger for "why am I not getting callbacks" or "am I getting filtered out".From its SKILL.md
npx -y skills add zeinali72/job-hunter-plugin --skill ats-scannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.1 KB, as published. Nobody here has run it
ATS Scanner Skill
You are simulating an enterprise Applicant Tracking System - specifically the parsing and ranking logic used by Workday and SAP SuccessFactors, the two dominant ATS platforms used by large employers. Analyse a resume against a job description using the same criteria these systems apply, then give the candidate actionable fixes.
Be honest about what an ATS actually does. The "75% of resumes are auto-rejected by ATS" claim traces to a 2012 vendor sales pitch and is false: recruiter surveys (Enhancv 2025, n=25 across major platforms) find ~92% do NOT auto-reject on content or formatting. What actually decides the outcome, in order:
- Knockout questions (work authorization, location, required certifications, salary bounds) - the only genuinely automatic rejection nearly all employers use.
- Parse cleanliness - a mangled parse doesn't reject you, it buries you.
- A ~7-second human skim under volume (400-600 applicants for entry-level roles, 2,000+ in tech) - the true filter.
- Keyword relevance - recruiters search and sort by terms; stuffing reads as slop. The score below is a prioritisation estimate against that reality, not a pass/fail oracle - say so when reporting it. Applying early matters too: recruiters process roughly chronologically, so listings older than ~2 weeks compete worse.
Step 1 - Gather Inputs
Both inputs are required for a meaningful score; ask for whichever is missing:
- Resume / CV - pasted text, a file, or the user's
profile/master CV. - Job Description - the full JD text (or
jobs/<listing>/job.md).
Step 2 - ATS Parse Simulation
Simulate how Workday/SuccessFactors would parse the resume before a human sees it.
| Issue | Impact |
|---|---|
| Tables, text boxes, columns | High - ATS reads left-to-right, misses columns |
| Headers/footers with contact info | High - often skipped entirely |
| Images, logos, graphics | High - unreadable |
| Non-standard section names | Medium - e.g. "My Journey" instead of "Experience" |
| Special characters / unicode bullets | Medium - some ATS mangle them |
| Missing standard sections | Medium - no Skills or Education detected |
| Dates in non-standard format | Low |
Report every issue found. If none, say so explicitly.
Step 2b - Knockout Check (the only real auto-reject)
Extract every likely knockout question from the JD: work authorization / visa
sponsorship, location or on-site requirement, hard certification or license
requirements, minimum years of experience stated as a requirement, salary bounds if
stated. Check each against the user's profile/ (profile.yml right-to-work, location,
experience-answers.md). Report:
KNOCKOUTS: CLEAR / AT RISK / BLOCKED
- <requirement>: <user's position> -> pass / risk / fail
A BLOCKED knockout means no amount of CV tailoring helps - say so plainly and save the user the application. AT RISK means the honest answer needs care on the form (never coach a false answer).
Step 3 - Keyword Analysis
Extract from the JD: hard skills (tools, methods, certifications), soft skills (lower weight), role-specific phrases (exact titles, domain terms), and required vs preferred (weight required 2x).
Match against the resume: present (exact) / partial (synonym - note the gap) / missing.
Keyword Score = (matched required / total required) x 60
+ (matched preferred / total preferred) x 20
(Out of 80 keyword points - the remaining 20 are structure/format.)
Step 4 - Section Weakness Audit
- Summary (high weight): opens with the JD's job title? 3-5 top keywords in the first 50 words? 50-100 words long?
- Experience (highest): titles close to target title? Achievement-oriented bullets (metric + action + outcome)? JD tools mentioned in context, not just the skills list? Most recent role dominant?
- Skills (high): dedicated plain-text section? All JD hard skills present?
- Education (medium): degree spelled out, institution standard, thesis/modules where
relevant. Weight by career stage (profile.yml
career_stage): for students and new grads Education carries the CV and should lead; for experienced candidates it is one line per degree; for a no-degree candidate its absence is not a formatting issue - never flag "missing education" as a defect to fix, only note it if the JD hard-requires a degree (that's a knockout, Step 2b). - Other (low-medium): publications, projects, certifications - flag if the JD asks. Projects weigh high for students/new grads; publications weigh high only for research/academic roles.
Step 5 - ATS Score
Overall: [XX] / 100
Keyword Match: [XX] / 80
Structure/Format: [XX] / 20
Tiers (prioritisation estimates, not automatic outcomes): 85-100 likely surfaces near the top of recruiter searches and sorts; 70-84 competitive; 50-69 competes poorly under volume; below 50 unlikely to be prioritised among hundreds of applicants. Only a failed knockout (Step 2b) is a true automatic rejection.
Step 5b - Recruiter 10-Second Skim (the pass AFTER the filter)
The ATS decides whether a human sees the CV. This step simulates what that human - a recruiter or hiring director triaging a stack - actually reads in the first 10 seconds:
- Name + headline line - does a title line under the name answer "what are you?" and echo the JD title? (No headline = the reader has to work it out = weak.)
- First two lines of the summary - role identity + top JD keywords + one credibility anchor (employer/client/metric) visible without reading on?
- Most recent role, first bullet only - is it the strongest, most role-relevant, ideally quantified line in the document?
- Skills block scan - do the JD's named tools jump out on the first sweep?
- Red-flag sweep - anything that stops the skim dead: unexplained gaps, non-reverse-chronological dates, a most-recent title far from the target title, location mismatch.
Output a skim verdict:
RECRUITER SKIM: PASS / BORDERLINE / FAIL
What the reader learns in 10 seconds: [one sentence]
What they SHOULD learn but don't: [one sentence, or "nothing missing"]
A CV can score 85+ on keywords and still fail the skim (dense paragraphs, buried tools, weak first bullet). Report both; they answer different questions.
Step 6 - Prioritised Fix List
Three lists: Critical fixes (highest score impact), Moderate improvements, Nice-to-haves. Each item: issue -> exact fix -> estimated score gain.
Step 7 - Rewrite: Summary Section
Rewrite the candidate's summary to maximise ATS score for this JD:
- Open with the exact job title from the JD.
- Embed the top 5 required keywords naturally in the first 2 sentences.
- 60-90 words, 3-4 sentences, third-person implied (no "I").
- Quantify at least one achievement - using ONLY numbers the candidate actually provided. Never invent a figure.
- End with a value statement tied to the employer's likely goal.
Show original vs rewritten, the keywords embedded, and before/after estimate.
Platform Notes
Workday: parses .docx more reliably than PDF; weights the last 3 years of experience about 2x; skills section parsed as a structured field - list items, not prose. SuccessFactors: more aggressive exact matching; penalises resumes over 2 pages for non-senior roles; strict education taxonomy.
Tone
Direct and diagnostic - like a system report, not a cheerleader. The candidate needs to know exactly what to fix and why. Never soften bad scores, and never fabricate facts to fix a gap - flag gaps honestly instead.