@arkone_ai/cv-batch-screen 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/install/install.js +38 -0
- package/package.json +27 -0
- package/skill.md +177 -0
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# @arkone_ai/cv-batch-screen
|
|
2
|
+
|
|
3
|
+
A [Claude Code](https://claude.ai/code) skill that screens multiple candidate CVs against a job description, ranks them, and produces a comparison report.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @arkone_ai/cv-batch-screen
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
In any Claude Code session:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/cv-batch-screen
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What it does
|
|
20
|
+
|
|
21
|
+
- Accepts a folder of CVs (PDF, DOCX, images) and a job description
|
|
22
|
+
- Scores each candidate across 5 categories with the same rubric as `/cv-screen`
|
|
23
|
+
- Ranks all candidates and categorizes as Advance, Hold, or Pass
|
|
24
|
+
- Produces a comparison table with per-candidate profiles for top candidates
|
|
25
|
+
- Supports export as Markdown, CSV, JSON, or branded PDF
|
|
26
|
+
|
|
27
|
+
## License
|
|
28
|
+
|
|
29
|
+
MIT
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { copyFileSync, mkdirSync, existsSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
|
|
7
|
+
const root = join(import.meta.dirname, '..');
|
|
8
|
+
const home = homedir();
|
|
9
|
+
|
|
10
|
+
const agents = [
|
|
11
|
+
{ name: 'Claude Code', dir: join(home, '.claude', 'skills') },
|
|
12
|
+
{ name: 'Codex', dir: join(home, '.codex', 'skills') },
|
|
13
|
+
{ name: 'Kiro', dir: join(home, '.kiro', 'skills') },
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const files = [
|
|
17
|
+
{ src: join(root, 'skill.md'), dest: 'cv-batch-screen.md' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
let installed = 0;
|
|
21
|
+
for (const agent of agents) {
|
|
22
|
+
if (!existsSync(agent.dir)) continue;
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
copyFileSync(file.src, join(agent.dir, file.dest));
|
|
25
|
+
}
|
|
26
|
+
console.log(`✓ ${agent.name}: ${agent.dir}`);
|
|
27
|
+
installed++;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (installed === 0) {
|
|
31
|
+
mkdirSync(agents[0].dir, { recursive: true });
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
copyFileSync(file.src, join(agents[0].dir, file.dest));
|
|
34
|
+
}
|
|
35
|
+
console.log(`✓ Claude Code: ${agents[0].dir}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log('\nUse /cv-batch-screen in any supported AI session.');
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@arkone_ai/cv-batch-screen",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Claude Code skill: batch screen multiple CVs against a job description, rank and compare candidates",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"postinstall": "node install/install.js"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"cv-batch-screen": "install/install.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"skill.md",
|
|
14
|
+
"install/"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"claude",
|
|
18
|
+
"claude-code",
|
|
19
|
+
"arkone",
|
|
20
|
+
"hr-ops",
|
|
21
|
+
"cv-batch-screen"
|
|
22
|
+
],
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/skill.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cv-batch-screen
|
|
3
|
+
description: "Screen multiple candidate CVs/resumes against a job description, rank them, and produce a comparison report. Use this skill when: 'screen these CVs', 'rank candidates', 'compare resumes', 'batch screen', 'review all applicants', 'shortlist candidates'. Also trigger for: 'candidate ranking', 'bulk CV review', 'applicant comparison'."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Designed for Claude Code
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Skill: cv-batch-screen
|
|
9
|
+
|
|
10
|
+
Screen multiple candidate CVs against a job description, score each one, rank them, and produce a comparison table with recommendations.
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- User has multiple CVs and wants them ranked against a JD
|
|
15
|
+
- User wants to shortlist candidates from a pool
|
|
16
|
+
- User wants a side-by-side comparison of candidates
|
|
17
|
+
|
|
18
|
+
## Step 1: Gather inputs
|
|
19
|
+
|
|
20
|
+
### Required
|
|
21
|
+
|
|
22
|
+
| Input | Accepts |
|
|
23
|
+
|---|---|
|
|
24
|
+
| CVs / Resumes | Folder path, glob pattern (e.g., `./candidates/*.pdf`), or list of file paths |
|
|
25
|
+
| Job Description | File path (PDF, DOCX, TXT) or pasted text |
|
|
26
|
+
|
|
27
|
+
### Optional
|
|
28
|
+
|
|
29
|
+
| Input | Default | Purpose |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Must-have skills | Extracted from JD | Override or supplement |
|
|
32
|
+
| Shortlist size | Top 5 or all | How many candidates to advance |
|
|
33
|
+
| Priority weights | Equal | Custom category weights |
|
|
34
|
+
| Screening strictness | Standard | `strict` / `standard` / `lenient` |
|
|
35
|
+
| Output format | Markdown | `md`, `csv`, `json`, `pdf` |
|
|
36
|
+
| Auto-reject threshold | 40 | Score below which candidates are auto-rejected |
|
|
37
|
+
|
|
38
|
+
### Collecting CVs
|
|
39
|
+
|
|
40
|
+
1. If given a folder path: glob for `*.pdf`, `*.docx`, `*.doc`, `*.txt`, `*.png`, `*.jpg`
|
|
41
|
+
2. If given a glob pattern: expand it
|
|
42
|
+
3. If given individual files: use as-is
|
|
43
|
+
4. Report how many CVs were found before processing
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Found 12 CVs in ./candidates/
|
|
47
|
+
Processing...
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Step 2: Parse JD (once)
|
|
51
|
+
|
|
52
|
+
Use the same JD parsing logic as the `cv-screen` skill:
|
|
53
|
+
- Extract role title, level, must-have skills, nice-to-haves, experience requirements, education requirements, key responsibilities
|
|
54
|
+
|
|
55
|
+
This is done once and reused for all candidates.
|
|
56
|
+
|
|
57
|
+
## Step 3: Screen each candidate
|
|
58
|
+
|
|
59
|
+
For each CV, run the same analysis as the `cv-screen` skill:
|
|
60
|
+
|
|
61
|
+
1. Parse the CV — extract name, experience, skills, education, work history
|
|
62
|
+
2. Score against JD — skills match, experience, education, career trajectory, role alignment
|
|
63
|
+
3. Detect red flags
|
|
64
|
+
4. Calculate overall score
|
|
65
|
+
|
|
66
|
+
### Progress reporting
|
|
67
|
+
|
|
68
|
+
Show progress as candidates are processed:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
[1/12] Jane Smith ........... 87/100 ✅
|
|
72
|
+
[2/12] John Doe ............. 72/100 ⚠️
|
|
73
|
+
[3/12] Alex Chen ............ 91/100 ✅
|
|
74
|
+
[4/12] Pat Johnson .......... 35/100 ❌
|
|
75
|
+
...
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Step 4: Rank and categorize
|
|
79
|
+
|
|
80
|
+
### Ranking
|
|
81
|
+
|
|
82
|
+
Sort all candidates by overall score (descending). Break ties by:
|
|
83
|
+
1. Skills match score (higher is better)
|
|
84
|
+
2. Experience score (higher is better)
|
|
85
|
+
3. Fewer red flags
|
|
86
|
+
|
|
87
|
+
### Categories
|
|
88
|
+
|
|
89
|
+
| Category | Criteria | Action |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| **Advance** ✅ | Score ≥ 75 | Move to interview |
|
|
92
|
+
| **Hold** ⚠️ | Score 40-74 | Review if pipeline is thin |
|
|
93
|
+
| **Pass** ❌ | Score < 40 (or below auto-reject threshold) | Do not advance |
|
|
94
|
+
|
|
95
|
+
## Step 5: Generate output
|
|
96
|
+
|
|
97
|
+
### Summary table
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
📋 Batch CV Screening Report
|
|
101
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
+
Role: Senior Software Engineer
|
|
103
|
+
Candidates: 12 screened
|
|
104
|
+
Date: 2026-03-23
|
|
105
|
+
|
|
106
|
+
── Ranking ──
|
|
107
|
+
|
|
108
|
+
| Rank | Candidate | Score | Skills | Exp | Edu | Trajectory | Alignment | Flags | Action |
|
|
109
|
+
|------|----------------|-------|--------|------|------|------------|-----------|-------|---------|
|
|
110
|
+
| 1 | Alex Chen | 91 | 28/30 | 23/25| 15/15| 13/15 | 12/15 | 0 | ✅ Adv |
|
|
111
|
+
| 2 | Jane Smith | 87 | 27/30 | 22/25| 13/15| 14/15 | 11/15 | 0 | ✅ Adv |
|
|
112
|
+
| 3 | Sam Rivera | 82 | 25/30 | 21/25| 12/15| 12/15 | 12/15 | 1 | ✅ Adv |
|
|
113
|
+
| 4 | John Doe | 72 | 22/30 | 18/25| 12/15| 10/15 | 10/15 | 1 | ⚠️ Hold |
|
|
114
|
+
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
|
|
115
|
+
| 12 | Pat Johnson | 35 | 10/30 | 8/25 | 7/15 | 5/15 | 5/15 | 3 | ❌ Pass |
|
|
116
|
+
|
|
117
|
+
── Summary ──
|
|
118
|
+
✅ Advance: 5 candidates
|
|
119
|
+
⚠️ Hold: 4 candidates
|
|
120
|
+
❌ Pass: 3 candidates
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Per-candidate details
|
|
124
|
+
|
|
125
|
+
For each candidate in the Advance category, include a brief profile:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
── #1 Alex Chen (91/100) ──
|
|
129
|
+
Current: Staff Engineer at Stripe (4 years)
|
|
130
|
+
Strengths: Full-stack match, K8s + AWS certified, led team of 8
|
|
131
|
+
Gaps: No Go experience (nice-to-have)
|
|
132
|
+
Interview focus: System design depth, management transition interest
|
|
133
|
+
Red flags: None
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
For Hold candidates, include a one-liner explaining what's missing:
|
|
137
|
+
```
|
|
138
|
+
── #4 John Doe (72/100) — Hold ──
|
|
139
|
+
Strong backend skills but no cloud infrastructure experience (must-have). Consider if role can flex.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For Pass candidates, one line each:
|
|
143
|
+
```
|
|
144
|
+
── #12 Pat Johnson (35/100) — Pass ──
|
|
145
|
+
Career focused on data science, minimal overlap with backend engineering requirements.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Save report
|
|
149
|
+
|
|
150
|
+
Default: `./cv-batch-screen-<role-slug>-<date>.md`
|
|
151
|
+
|
|
152
|
+
Also support:
|
|
153
|
+
- `--format csv` → save ranking table as CSV (for spreadsheet import)
|
|
154
|
+
- `--format json` → structured JSON (for ATS integration)
|
|
155
|
+
- `--format pdf` → branded PDF report (uses brand config like offer-letter skill)
|
|
156
|
+
|
|
157
|
+
## Step 6: Optional follow-up actions
|
|
158
|
+
|
|
159
|
+
After presenting results, offer these next steps:
|
|
160
|
+
|
|
161
|
+
| Action | What it does |
|
|
162
|
+
|---|---|
|
|
163
|
+
| "Screen more" | Add more CVs to the existing batch and re-rank |
|
|
164
|
+
| "Adjust weights" | Re-score with different category weights |
|
|
165
|
+
| "Generate interview kits" | Create interview scorecards for Advance candidates |
|
|
166
|
+
| "Export for ATS" | Export as JSON/CSV for ATS import |
|
|
167
|
+
| "Email rejections" | Draft and send polite rejection emails to Pass candidates (requires email config) |
|
|
168
|
+
|
|
169
|
+
## Error handling
|
|
170
|
+
|
|
171
|
+
| Issue | What to do |
|
|
172
|
+
|---|---|
|
|
173
|
+
| No CVs found in path | Ask user to verify the path or provide files |
|
|
174
|
+
| Mixed file types | Process what's readable, report which files failed |
|
|
175
|
+
| Duplicate candidates | Detect by name similarity, keep the most recent CV, warn user |
|
|
176
|
+
| Very large batch (50+) | Warn about processing time, suggest screening in chunks |
|
|
177
|
+
| CV in foreign language | Note the language, attempt analysis, flag confidence as lower |
|