@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 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 |