Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Screen and rank job applicants against a job description, summarize top candidates, and flag potential concerns. Use when reviewing large applicant pools from ATS systems like Greenhouse, Ashby, or Workday.
.claude/skills/migrateforce-candidate-screening/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 365% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 164% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 5% | 0% |
This skill enables AI agents to screen large volumes of job applicants efficiently. Instead of manually reviewing 500 resumes, the agent reads all applications, scores them against the job requirements, and produces a ranked shortlist with summaries.
The Problem: Recruiters spend 23 hours per hire just screening resumes. With 250+ applications per corporate job, most qualified candidates are never seen.
The Solution: Agent reads every application, scores against JD, surfaces the top 10% with 3-bullet summaries.
| Field | Type | Required | Description | |-------|------|----------|-------------| | job_description | text | yes | Full job description with requirements, responsibilities, qualifications | | candidates | array | yes | List of candidate objects with resume/application data | | ranking_threshold | number | no | Percentage of candidates to include in shortlist (default: 10) | | must_have_skills | array | no | Non-negotiable skills/qualifications | | nice_to_have_skills | array | no | Preferred but optional qualifications | | location_preference | string | no | Required location or "remote" | | experience_range | object | no | Min/max years of experience |
| Field | Type | Description | |-------|------|-------------| | ranked_candidates | array | Candidates sorted by match score (highest first) | | candidate_summaries | array | 3-bullet summaries for shortlisted candidates | | screening_flags | array | Concerns or notes (gaps, job hopping, missing skills) | | match_scores | object | Detailed scoring breakdown per candidate | | recommendation | text | Overall hiring recommendation |
Extract from job description:
For each candidate:
Apply scoring rubric:
Output structured report with:
SCORE RANGES:
90-100: Strong match - Recommend immediate interview
80-89: Good match - Recommend phone screen
70-79: Potential match - Review manually
60-69: Weak match - Only if pipeline thin
<60: No match - Do not proceed
RED FLAGS (auto-deduct points):
- 3+ jobs in 2 years: -10 points
- Employment gap >6mo unexplained: -5 points
- Missing required skill: -15 points per skill
- Overqualified (may not stay): -5 pointsGET /v1/candidates, GET /v1/applicationsGET /candidate.list, GET /application.listGET /v1/opportunitiesinterview-scheduler - Schedule interviews for shortlisted candidatescandidate-outreach - Send personalized messages to top candidatesoffer-letter-generator - Generate offers for selected candidatesUser: Screen the applicants for the Senior Engineer role
Agent: I'll screen all 247 applicants for the Senior Software Engineer position.
[Processing 247 resumes...]
## Screening Complete
**Top 10% Candidates (25 of 247):**
### 1. Sarah Chen - Score: 94/100
- 8 years Python/Django experience at scale (Netflix, Stripe)
- Led team of 6, shipped 3 major products
- Based in SF, open to hybrid
### 2. Marcus Johnson - Score: 91/100
- Ex-Google Staff Engineer, distributed systems expert
- Perfect skills match, strong system design
- ⚠️ May be overqualified for IC role
### 3. Priya Patel - Score: 89/100
- 5 years backend, promoted twice at current company
- Missing Kubernetes experience (trainable)
- Strong referral from current employee
[... 22 more candidates ...]
**Recommended Action:** Schedule phone screens with top 10 candidates this week.
**Flagged for Review:**
- 12 candidates in "potential match" range (70-79)
- 3 candidates flagged for job hopping pattern| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 7,401 | 1,788 | -76% | 1 | 1 | 0% | 929 | 1,546 | +66% | 0 | 0 | — |
case-01 | fail→pass | 5,222 | 16,069 | +208% | 1 | 1 | 0% | 918 | 4,270 | +365% | 0 | 0 | — |
case-02 | fail→pass | 3,830 | 2,430 | -37% | 1 | 1 | 0% | 662 | 1,746 | +164% | 0 | 0 | — |
case-03 | fail→pass | 8,956 | 2,337 | -74% | 1 | 1 | 0% | 1,357 | 1,737 | +28% | 0 | 0 | — |
case-05 | pass→pass | 9,902 | 2,417 | -76% | 1 | 1 | 0% | 1,443 | 1,722 | +19% | 0 | 0 | — |
case-06 | fail→pass | 10,746 | 3,123 | -71% | 1 | 1 | 0% | 1,597 | 1,676 | +5% | 0 | 0 | — |
case-07 | pass→pass | 5,405 | 2,000 | -63% | 1 | 1 | 0% | 676 | 1,680 | +149% | 0 | 0 | — |
case-08 | fail→pass | 3,101 | 1,889 | -39% | 1 | 1 | 0% | 500 | 1,633 | +227% | 0 | 0 | — |
case-21 | pass→pass | 5,377 | 2,664 | -50% | 1 | 1 | 0% | 926 | 1,769 | +91% | 0 | 0 | — |
case-09 | fail→pass | 4,084 | 2,065 | -49% | 1 | 1 | 0% | 552 | 1,633 | +196% | 0 | 0 | — |
case-10 | fail→pass | 5,174 | 2,032 | -61% | 1 | 1 | 0% | 714 | 1,554 | +118% | 0 | 0 | — |
case-11 | pass→pass | 2,962 | 1,653 | -44% | 1 | 1 | 0% | 446 | 1,561 | +250% | 0 | 0 | — |
case-12 | fail→pass | 9,294 | 2,379 | -74% | 1 | 1 | 0% | 1,300 | 1,671 | +29% | 0 | 0 | — |
case-13 | fail→fail | 9,225 | 1,625 | -82% | 1 | 1 | 0% | 915 | 1,521 | +66% | 0 | 0 | — |
case-14 | fail→pass | 6,265 | 2,103 | -66% | 1 | 1 | 0% | 825 | 1,594 | +93% | 0 | 0 | — |
case-15 | fail→fail | 6,359 | 1,981 | -69% | 1 | 1 | 0% | 963 | 1,573 | +63% | 0 | 0 | — |
case-16 | fail→fail | 6,265 | 1,999 | -68% | 1 | 1 | 0% | 916 | 1,530 | +67% | 0 | 0 | — |
case-17 | pass→pass | 12,326 | 8,993 | -27% | 1 | 1 | 0% | 1,737 | 2,727 | +57% | 0 | 0 | — |
case-18 | pass→pass | 15,474 | 14,024 | -9% | 1 | 1 | 0% | 2,743 | 3,596 | +31% | 0 | 0 | — |
case-19 | pass→pass | 6,157 | 2,179 | -65% | 1 | 1 | 0% | 1,024 | 1,570 | +53% | 0 | 0 | — |
case-20 | pass→pass | 6,562 | 2,054 | -69% | 1 | 1 | 0% | 987 | 1,566 | +59% | 0 | 0 | — |
case-22 | pass→fail | 3,857 | 6,646 | +72% | 1 | 1 | 0% | 653 | 2,490 | +281% | 0 | 0 | — |
case-23 | fail→fail | 13,009 | 7,115 | -45% | 1 | 1 | 0% | 2,063 | 2,554 | +24% | 0 | 0 | — |
case-24 | fail→fail | 16,384 | 9,940 | -39% | 1 | 1 | 0% | 2,378 | 2,916 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +38 percentage points is the difference between those two pass rates over the 24 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.